xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意脚本,实现对用户游览器的控制 xss攻击可以分成两种类型: (1)非持久型攻击 非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的 假设有以下index.php页面:
这时,当攻击者给出以下URL链接:
当用户点击该链接时,将产生以下html代码,带'attacked'的告警提示框弹出:
除了插入alert代码,攻击者还可以通过以下URL实现修改链接的目的:
当用户点击以上攻击者提供的URL时,index.php页面被植入脚本,页面源码如下:
(2)持久型攻击 持久型xss攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在 例如留言板,攻击者输入内容 <img src=0 onerror=alert(5)/> 此信息就被保存到了数据库,那么以后所有显示此留言的页面都会弹出alert框
XSS的防御 基本原则:不相信任何用户的任何输入内容 对所有参数和提交的内容都要严格判断和过滤 (1)XSS的一些基本转义 html_escape javascript_string_escape url_escape css_string_escape (2)设置字符编码 避免如 utf-7 xss 等问题 (3)设置content-type 避免如json的xss等问题 例如 php 可以使用 htmlspecialchars 函数进行转义 例如 java 可以使用 WASP Java Encoder,Coverity Security Library(CSL)