XSS攻击

XSS(Cross Site Scripting)攻击的全称是跨站脚本攻击,跨站脚本攻击的方式是恶意攻击者在网页中嵌入恶意脚本程序,当用户打开网页的时候脚本程序便在客户端执行,盗取客户的cookie及用户名和密码,下载执行病毒及木马程序,甚至获得客户端的admin权限等。

使用过滤函数,禁用cookie

CSRF攻击

CSRF(跨站请求伪造)是一种恶意的攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令

使用token验证,禁用cookie,校验Referer参数

常用的过滤函数:

  • htmlspecialchars把预定义的字符转换为 HTML 实体

    预定义字符为:

    • & (和号)成为 &

    • “ (双引号)成为 “

    • ‘ (单引号)成为 ‘

    • < (小于)成为 <

    • > (大于)成为 >

    注意:在使用htmlspecialchars函数时默认第二个参数为:ENT_COMPAT只编码双引号,使用该函数的时候更多的加上第二个参数,对单引号也编码:htmlspecialchars($string,ENT_QUOTES)

    • ENT_COMPAT - 默认。仅编码双引号。
    • ENT_QUOTES - 编码双引号和单引号。
    • ENT_NOQUOTES - 不编码任何引号。
  • htmlentities把字符转换成html实体

  • stripslashes删除反斜杠

  • strip_tags去除字符串中的html标签

防范方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
A.PHP直接输出html的,可以采用以下的方法进行过滤:

1.htmlspecialchars函数
2.htmlentities函数
3.HTMLPurifier.auto.php插件
4.RemoveXss函数

B.PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:

1.尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容
2.必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤

C.其它的通用的补充性防御手段

1.在输出html时,加上Content Security Policy的Http Header
(作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
(缺陷:IE或低版本的浏览器可能不支持)
2.在设置Cookie时,加上HttpOnly参数
(作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
(缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)
3.在开发API时,检验请求的Referer参数
(作用:可以在一定程度上防止CSRF攻击)
(缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)