反射型XSS
如果攻击用JavaScript代码位于攻击目标网站之外的其他网站(恶意网站或邮件中的URL),
就称之为反射型XSS。窃取Cookie实例中用到的XSS攻击模式,就属于反射型XSS。反射型XSS多发生于网页
将用户的输入值原封不动地显示出来的情况下。其中,输入值确认页面就是一个典型的例子
存储型XSS
XSS产生的根源
XSS漏洞产生的原因为,生成HTML的过程中,HTML语法中含有特殊意义
字符(元字符)没有被正确处理,结果导致HTML或JavaScript被肆意注入,从而
使得原先的HTML结构产生变化。为了消除元字符的特殊意义将其转化为普通字符
就需要用到转义(Escape)处理。HTML的转义处理对于消除XSS至关重要
HTML的转义
位置:属性值(用双引括起来,并转义尖角,双引和&),元素值(不能出现尖角,双引)
php中 htmlspecialchars($_GET['mail'],ENT_QUOTES,"UTF-8")
XSS的辅助性对策
输入校验
通过校验输入值的有效性,当输入值不符合条件时就显示错误消息并促使用户重新输入,
有时也能防御XSS攻击,但不利于用户体验,所以不建议
当且仅当输入值为字母或数字的情况下,输入校验才能预防XSS攻击
给Cookie添加HttpOnly属性
php.ini:session.cookie_httponly = On
能杜绝XSS中窃取会话ID这一典型的攻击手段,但需注意的是其他攻击手段依然有效,所以这样
只是限制了攻击者的选择范围,并不能杜绝所有XSS攻击。