MENU

什么是 XSS、CSRF、SQL注入?

April 14, 2021 • Read: 1621 • PHP,编码,MySQL

XSS跨站脚本攻击

跨站脚本攻击,英文全称Cross site Script,本来缩写是CSS,但为了和层叠样式表有所区别,所以在安全领域叫做“XSS”。

XSS攻击,通常指黑客通过HTML注入篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。一开始这种攻击的演示案例是跨域的,所以叫做“跨站脚本”攻击,但由于JS强大功能以及前端应用的复杂化,是否跨域已经不再重要。但由于历史原因,XSS这个名字却被保留了下来。

XSS可分为三类:

  • 反射型XSS:简单地把用户输入的数据反射给浏览器,比如需要用户点击一个恶意链接。
  • 存储型XSS:会把用户输入的数据存储在服务器,这种XSS具有很强的稳定性
  • DOM based XSS:通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS

解决方法:

  • 主要是过滤用户输入的内容,让攻击失效。
  • 在用户输入的时候进行检查,在输出的时候对内容进行HTML编码转义,PHP可以使用htmlspecialchars()函数来完成这一操作
  • 有时候需要用户编辑富文本,这时候可以过滤一些危险的标签,比如<iframe><script><base><form>等。在 标签的选择上应该使用白名单,避免使用黑名单。比如,只允许<a><img><div> 等比较 "安全" 的标签存在。

CSRF跨站点请求伪造

跨站点请求伪造是一种用户在当前已登陆的网站上执行非本意的操作的攻击方法,XSS利用的是用户对网站的信任,CSRF利用的是网站对用户浏览器的信任。

例如:当用户登录了a站点,之后用户访问b站点,b站点可以加载一个图片资源,url设置为:http://www.a.com?delete=id,当加载图片资源的时候浏览器会对这个url发起请求,目标网站以为是用户执行了删除操作,而去删除一些东西,比如订单或者文章什么的。

解决方法:

  • 使用验证码:CSRF请求往往是在用户不知情的情况下构造的网络请求。而验证码,之前强制用户必须与应用进行交互,才能完成最终的请求。通常情况下验证码可以很好的遏制CSRF攻击。
  • 检查Referer字段:常见的互联网应用,页面和页面之间都有一定的关系,使得每个正常请求的Referer具有一定的规律。当请求过来时,可以通过判断发起请求的页面是否是合法的地址,当请求合法后再处理。
  • 使用Token验证:CSRF可以成功的本质是请求的所有参数都可以被攻击者猜到,如果使用了token,攻击者无法猜到的参数,则无法构建CSRF攻击。

SQL注入攻击

注入攻击的本质是:把用户输入的数据当作代码去执行,这里有两个关键条件

  1. 用户能够控制输入
  2. 原本程序要执行的代码,拼接了用户输入的数据

解决方法:

  • 使用预编译语句
  • 使用存储过程
  • 检查数据类型
  • 数据库使用最小原则:避免直接使用root用户操作
Last Modified: September 12, 2021