web安全学习日志---xss漏洞(跨站脚本攻击)

发布时间 2023-07-10 18:12:24作者: 孙亦

1.反射性xss(reflacted)

  仅执行一次,非持久型。主要存在于攻击者将恶意脚本附加到url的参数中,发送给受害者,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

利用场景:

直接插入JS代码,修改url参数

  

攻 <script>alert('hack')</script>

防 $name=str_replace('<script>', '  ',$name)     #将<script>替换成空

攻 <Script>alert('hack')</script>

   <scri<script>pt>alert('hack')</script>

防 $name=preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i','  ',$name);      #pre_replace()正则替换 i为忽略大小写

攻 <img src=1 onerror=alert('hack')>  #用事件代替<script>标签

防 $name=htmlspacialchars($name);   #htmlspacialchars(string)把预定义的字符<>$、转换为HTML实体,防止浏览器将其作为HTNL元素。

2.存储型xss(stored)

持久型。主要存在于攻击者将恶意脚本存储到服务器数据库中,当用户访问包含恶意相关数据的页面时,服务端未经严格过滤处理而输出在用户浏览器中,导致浏览器执行代码数据。

利用场景:

  

防(输入)$message=strip_tags(addsashes($message));  #strip_tags(addsashes($message))函数剥去字符串中的HTML、XML以及PHP的标签;

   (输出)$message=htmlspecialchar($massage);

                 $name=htmlspecialchar($row[''name]);

3.DOM型xss

通过JavaScript操作document,实现dom树的重构。主要存在于用户能修改页面的dom,造成客户端payload在浏览器中执行。

利用场景:

在url中

(结合网页的代码,补全前面,使<script>……</script>成为独立代码)