PHP 直接输出 html 的,可以采用以下的方法进行过滤:
1.htmlspecialchars 函数
2.htmlentities 函数
3.HTMLPurifier.auto.php 插件
4.RemoveXss 函数
PHP 输出到 JS 代码中,或者开发 Json API 的,则需要前端在 JS 中进行过滤:
1.尽量使用 innerText(IE)和 textContent(Firefox),也就是 jQuery 的 text()来输出文本内容
2.必须要用 innerHTML 等等函数,则需要做类似 php 的 htmlspecialchars 的过滤(参照@eechen 的答案)
其它的通用的补充性防御手段
1.在输出 html 时,加上 Content Security Policy 的 Http Header
(作用:可以防止页面被 XSS 攻击时,嵌入第三方的脚本文件等)
(缺陷:IE 或低版本的浏览器可能不支持)
2.在设置 Cookie 时,加上 HttpOnly 参数
(作用:可以防止页面被 XSS 攻击时,Cookie 信息被盗取,可兼容至 IE6)
(缺陷:网站本身的 JS 代码也无法操作 Cookie,而且作用有限,只能保证 Cookie 的安全)
3.在开发 API 时,检验请求的 Referer 参数
(作用:可以在一定程度上防止 CSRF 攻击)
(缺陷:IE 或低版本的浏览器中,Referer 参数可以被伪造)
声明:1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。







