之前就了解过这方面的知识,但是没有系统地总结。今天在这总结一下,也让自己在接下来的面试有个清晰的概念。
XSS跨站脚本攻击:
xss 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)缩写混淆,所以将跨站脚本攻击缩写为xss。Xss是攻击者在web页面插入恶意的代码。当用户浏览该页面的时候,代码执行,从而实现攻击目的。对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
XSS跨站脚本攻击分为:
- 反射型XSS
反射性XSS,也就是非持久性XSS。用户点击攻击链接,服务器解析后响应,在返回的响应内容中出现攻击者的XSS代码,被浏览器执行。一来一去,XSS攻击脚本被web server反射回来给浏览器执行,所以称为反射型XSS。
下面举例子说明:
http://xxx.com?username=yang
//页面输出
hello yang
//如果我把上面的url变成这样,同时服务器没有做过滤
http://xxx.com?username=<script>alert("xss")</script>
//页面会出现弹框,显示xss;
你也许会说,这样的URL一看就有问题,怎么会有人点击?,是的,这类的URL会让人怀疑,但如果使用短网址服务将之缩短,你还看得出来么?
- 持久型XSS
指通过提交恶意数据到服务器的数据库。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:恶意用户的Html输入Web程序->进入数据库->Web程序->用户浏览器。
说一个很常见的微博评论:如果不做过滤的话,很容易造成持久性xss攻击,当用户访问已经被插入恶意代码的页面,很容易被攻击。
- DOM-based XSS
基于DOM的XSS,也就是web server不参与,仅仅涉及到浏览器的XSS。比如根据用户的输入来动态构造一个DOM节点,如果没有对用户的输入进行过滤,那么也就导致XSS攻击的产生。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset&#