• 是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它容许恶意用户将代码注入到网页上,其余用户在观看网页时就会受到影响。这类攻击一般包含了HTML以及用户端脚本语言。
• 反射型
• 存储型
• DOM型
防治XSS,我的以为核心内容就是不能相信任何用户输入的数据。
因此凡是前端要操做用户数据的地方,所有要转义。
固然。简单一句话,固然不容易处理这样的状况。由于若是每个方法都要去作一个encode那真是程序员的灾难。
那就分状况讨论下。
咱们会在什么地方碰到XSS:
凡是数据能够被用户构造的位置。
1.用户输入数据,而后被输出。
若是用户输入<script>location.href='www.cnblog.com/bugluo'</script>,被转发围脖,嗯嗯。用户全跑我这来了。
因此咱们能够怎么作?
若,咱们使用smarty这样的后端模板。咱们能够在编译平台作相似上线前自动加encode方法的功能。
若,咱们使用前端直接生成html,拼接html时,注意用$.text()方法,而不要使用$.html(''),或者使用cratedom的方式。
2.富文本编辑器。
富文本编辑器很是容易出现一个问题,就是dom被构造,例如:
<a onclick="location.href='你懂的'"></a>
事件中:eval setTimeout/setInterval document.write new Function() String.fromCharCode 前端模板
有这么多xss攻击的漏洞地方,咱们该怎么防范呢?
1.不要相信用户的任何输入
2.过滤
3.转义
不要相信用户的任何输入:白名单机制,只有被容许的事件才可以去执行,只有被容许的内容才可以显示
过滤掉任何可能形成xss的内容。
将特殊的字符转义:
$^*()+={}[]|/:<>.?'"
文本过滤,因为XSS漏洞会慢慢被挖掘出来,绵绵不绝。因此白名单机制可以更好的知足防XSS的需求,可是会形成可配置性大大下降。
转义:
function smarty_modifier(str){
$str = strval(str);
return str_replace(array('\\','&',……,array('\\\\','$amp;',……),str)
}
直接上代码通俗易懂。