1. token校验

登录后生成token,客户端中将token存储cookie中,服务器端将token存储与session中。后续的接口请求必须带上token,当和服务器一致则认为请求安全。

常用于客户端和服务器端的安全校验。

2. 服务器之间的sign签名校验

A服务器中用一个 key(私钥) + 时间戳 通过算法生成一个公钥,将时间戳和公钥传递给服务器B。服务器B通过同样的私钥和时间戳来生成一个公钥。如果两个公钥相同,则签名通过。

用于服务器和服务器之前的签名认证。比如支付宝,微信等接口签名下发。

3. 验证码

当部分接口可能涉及到大量的请求来攻击的时候。比如登录,注册等包含提交信息的。需要先验证验证码,当验证码通过后才会处理后续逻辑。

缺点是,每次都要输入验证码,影响用户体验。可以通过某段时间范围内,用户请求量是否超过某个阈值,当超过某个阈值后,才会出现输入验证码,否则不会出现验证码。

4. 接口请求频次限制

部分接口可能涉及到用户大量频繁的提交,但是当超过某个频次后,我们可能认为他是恶意攻击。比如聊天室,搜索接口,翻译等接口。

当某个ip或者token对接口在时间范围内有大量请求的时候,应该将该用户的ip限制,接口返回429。

5. 正确使用post,get请求方式。涉及有安全数据的,应该用post来提交。

6. 接口返回中应该将不需要的数据过滤。比如获取某个用户信息接口,如果只要用户名,就返回用户名。不要将该用户的用户名,密码,住址等私密信息返回,以便于造成泄露。

7. 使用https

8. 定时的分析接口请求日志或者nginx日志,确认是否有非法的访问,防患于未然。 你会经常发现,请求中包含各种路径,甚至包含sql语句的。根据这种请求分析自己的系统中是否存在漏洞



Composer是PHP用来管理依赖关系的工具。

常用命令:

查看版本号:composer -V

查看帮助命令:composer -help

composer升级:composer self-update

composer安装依赖包:composer install

一、定义

正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。

反向代理实际运行方式是代理服务器接受网络上的连接请求。它将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

可以这么认为,对于正向代理,代理服务器和客户端处于同一个局域网内;而反向代理,代理服务器和源站则处于同一个局域网内。

二、用途

正向代理

突破访问显示:通过代理服务器,可以突破自身ip访问限制,访问国外网站等;

提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,会将部分请求的响应保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度;

提高客户端的安全性和性能。

反向代理

负载均衡:根据服务器的负载情况,将客户端请求分发到不同的真实服务器上,从而避免过载;

提高访问速度:反向代理服务器可以对静态内容及短时间内有大量访问请求的动态内容提供缓存服务,提高访问速度;

防止被攻击:如果网站使用反向代理,则其服务器地址是隐藏的;

缓存:反向代理服务器可以用来缓存网站内容,提高网站性能;

SSL加密:为每个用户加密和解密安全套接字层(SSL)通信对于源服务器可能无效,反向代理可以通过加密和解密所有请求来完成这项工作。

三、异同点

相同点

都起到了连接与保护的作用,正向代理和反向代理所处的位置都是客户端和真实服务器之间,所做的事情也都是把客户端的请求转发给服务器,再把服务器的响应转发给客户端。

都能提高访问速度。

不同点

正向代理是用户客户端的代理,服务器不知道真正的客户端是谁;反向代理是服务器的代理,客户端不知道真正的服务器是谁;

正向代理架设在客户机和目标主机之间,反向代理架设在网络服务器端;

正向代理主要是用来解决访问限制问题;反向代理则是提供负载均衡、安全防护等作用。

多系统的环境下,当用户一次登录获得所有系统的信任许可,而不用每个系统都需要单独登录。

登录 -> 服务器端生成token,将不同系统对应用户的token更新该token,并且设置为有效

客户端 -> 跳转不同的系统,带上该token获取系统间的信任

TCP是面向连接、保证传输的协议,而UDP是无连接的协议。

TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等。在传输数据前,双方会先建立一条虚拟的通道,可以减少数据传输差错。

UDP的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视频直播等。在数据传输时,每个数据段都是一个独立的信息,包括完整的源地址和目的地,因此,数据能否被对方接收、数据到达的实践和内容的完整性有序性都无法得到保证。

定义

null 类型是 PHP 的数据类型,它仅有一个值 null常量(不区分大小写)。

以下情况,被认为是null:

  • NULL===NULL
  • NULL==NULL
  • 未定义的变量(php7.2后,未定义的变量的使用会报异常)
  • 赋值为空的变量
  • 被unset后的变量

测试用例

<?php
if (NULL===NULL) {
    echo "1";
}

if (NULL==NULL) {
    echo "2";
}

if ($s==NULL) {
    echo "3";
}

$s="";

if ($s==NULL) {
    echo "4";
}

$s=3;
unset($s);
if ($s==NULL) {
    echo "5";
}
/**
输出结果:12345
其中5 3 会报notes类型的错误
*/
?>


来源

表单输入或者url传参

常见攻击方式

  • 使用';--
SELECT * FROM  adv where title='zhangsan';DROP TABLE article--'

引号和分号是为了隔离前面的sql语句,后面的--代表注释。因为最后一个'可能会影响删表,所以使用注释不影响执行删表。注意:最后一个引号来自代码封装:原语句可能如下的写法:


$sql = "SELECT * FROM  adv where title='".$_GET['title']."'";
#这句php代码因为title本身是被引号的
  • 使用 ';' +or + --
SELECT * FROM  adv where title='zhangsan' or DROP TABLE article--'

注意:在PHP中的 mysql_query() 是不允许执行多个SQL语句的,但是还是可以通过or and 等语句来执行。

预防sql注入

  • 开启php魔术模式,magic_quotes_gpc=on;
  • 打开php.ini中的安全模式 safe_mode = on
  • 关闭危险函数,比如system,chmod等函数;
  • 错误信息控制 ,让非开发人员看到有关数据库错误信息是很危险的,这会泄露数据库,表,字段等名称信息以及其他不安全因素。
  • 使用php自带函数将一些特殊字符转义后再执行sql语句:
    • addslashes() 是强行加\;
    • mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;
    • mysql_escape_string不考虑连接的当前字符集。


基本表是本身独立存在的表,在 SQL 中一个关系就对应一个表。

索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。

缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。

数据库存储过程是一种数据库应用程序,它使用一组特定的SQL语句来操作数据库中的数据。存储过程可以用来提高数据库的性能,提供可重复使用的功能,以及提高数据库的安全性。

优点:

1.可以提高数据库的性能:存储过程可以提高数据库的性能,因为它可以将一组SQL语句封装为一个单独的过程,而不是每次执行SQL语句时都要重新编译它们。

2.可重复使用:存储过程可以被多次使用,这样可以节省开发时间,减少重复代码。

3.提高安全性:存储过程可以提高数据库的安全性,因为它可以限制用户对数据库的访问,同时也可以防止用户误操作数据库。