1. 1. SQL注入
  2. 2. XSS攻击
  3. 3. SSRF攻击
  4. 4. CSRF攻击
  5. 5. 文件上传

SQL注入

定义:
SQL注入是通过Web表单提交或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL语句

例:

$user_name = $_GET['username'];
$password = $_GET['password'];

$sql = "SELECT * FROM user WHERE username = '" . $user_name . "' AND password = '" . $password. "'";  

用户恶意输入

$_GET['username'] = "' or 1=1 -- '";
$_GET['password'] = "123456";

注入后的SQL语句为

$sql = "SELECT * FROM user WHERE username = ' or 1=1 --' AND password = '123456' "; 

执行注入后的SQL语句,可以返回 user表的全部数据

防止:

- 永远不要相信用户的输入,要对用户的输入进行校验,对特殊符号进行转义
- 使用PDO或者MySQLi的数据库扩展
- 项目配置文件中MySQL账户只配置基本增删查改操作权限,其余危险操作Drop、Truncate取消掉

注:

1、MySQL扩展自5.5已废弃,7.0开始以及被移除

2、addslashes 和 mysql_real_escape_string 这样转义不安全

XSS攻击

定义:

XSS攻击是一种通过Web表单提交或者URL参数提交,将代码加载到用户使用的页面上

类型:

  • DOM型
    • 注入的恶意代码没有显示的包含再Web服务器的响应页面里面,但是会被页面中js脚本,以变量的形式访问到,憧而来实行攻击
  • 持久型(存储型)
    • 注入的恶意代码存储再服务器上,受害者请求服务器信息时,恶意代码被执行
  • 非持久型(反射型)
    • 注入的恶意代码没有存储再服务器上,通过引诱用户点击一个链接到目标网站进行实施攻击

例:

持久型:在input框中输入

/><script>alert(“xss”)</script>

进行提交

非持久型:在浏览器中输入/xxx.php?name=<script>alert(/xss/)</script>

//DOM型:
<script>
var temp = document.URL
var temp_new = temp + 'test'
document.write(decodeURI(temp_new));
</script>

防止

  • 要对用户的输入进行校验,对特殊符号进行过滤或转义
  • 对出参进行编码,如<>输出时要进行转换编码,<用:&lt;>用:&gt;
  • 利用HTTP-only,将cookie设置成HTTP-only防止

SSRF攻击

定义

SSRF(Server-Side Request Forgery,服务器端请求伪造):通俗的来说就是我们伪造服务器端发起的请求,从而获取客户端所不能得到的数据

漏洞主要生产包含这些代码里面,比如curlfile_get_contentsfsockopen


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $GET['url']);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_exec($ch)
curl_close($ch)

请求地址:http://www.xxx.com/xxx.php?url=xxx

将url参数修改为:file:///etc/password可以获取敏感文件的信息

将url参数修改成为:dict://127.0.0.0:3306/info可以获取目标主机的3306端口运行的应用

除了file协议dict协议,还可以利用gopher协议和 http/htpps协议进行攻击

还可以攻击RedisMemcache,内网应用,还可以查看敏感文件信息等等

防止

  • curlfile_get_contentsfsockopen方法中参数进行严格验证
  • 禁用不需要的协议,仅仅允许HTTP或HTTPS
  • 黑名单内网IP,避免应用被用来获取内网数据,攻击内网
  • 限制常用的请求端口,如:80、443、8080、8090

CSRF攻击

定义
CSRF(Cross-site request forgery)跨站请求伪造,攻击者通过伪造用户的浏览器的请求盗用受信用户的神法,用受信用户身份发送恶意请求

原理

1、登陆受信用网站A

2、验证通过,在本地生成Cookie

3、在不登出A情况下,访问危险网站B

4、B要求访问第三方站点(A),发出一个请求

5、根据B在(3)的请求,浏览器带着(2)产生的Cookie访问A

6、A不知道(5)中请求是C发出的还是B发出的,由于浏览器会自动带上用户C的Cookie,所以A会根据用户的权限处理(5)的请求,B就达到了模拟用户操作的目的

危害

防止

  • 使用Token
  • 加验证码
  • 验证 HTTP Referer字段
  • 在HTTTP头中自定义属性并验证

文件上传

定义
文件上传漏洞是攻击者上传了一个可以执行的文件到服务器上执行,可执行文件包含病毒、木马、恶意脚本等

防止

  • 文件扩展名检测
  • 文件 MIME 验证
  • 文件目录设置不可执行权限
  • 设置单独域名的文件服务器
  • 文件重命名