美文网首页Web前端之路JAVA安全开发规约
开发安全规约(二)——防止跨站脚本攻击

开发安全规约(二)——防止跨站脚本攻击

作者: Franchen | 来源:发表于2019-09-24 16:11 被阅读0次

什么是跨站脚本攻击?

跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是Web应用程序一种常见的攻击方式。它是指在服务器未严格验证输入输出时,网站容易被攻击者注入恶意代码,当其他用户访问这些携带恶意代码的网站时,就会遭受攻击。因此,XSS是一种间接攻击技术,不直接攻击Web服务器,而是以其为跳板攻击用户。

跨站脚本攻击的分类

按攻击类型分类:

  • 反射型:攻击者构造含有恶意代码的链接,诱导用户点击,请求到达服务器后,若未对输入输出严格验证,恶意代码会被反射给用户运行,使用户遭受攻击。

    反射型XSS
  • 存储型:攻击者构造含有恶意代码数据的请求提交给服务器,若在数据存储到数据库以及从库中读取显示给用户的过程中,未对输入输出严格验证,恶意代码数据将被存到数据库中,且所有访问到该恶意代码数据的用户均遭受攻击。

    存储型XSS
  • DOM型:随着单页面应用的发展,越来越多Web应用依赖锚点(#userinfo/jack)来实现页面路由跳转。这也带来新的DOM型XSS,如:#userinfo/<script>alert(document.cookie)<script>,该攻击与反射型类似,但不经过服务器反射,直接在用户端执行。详见:https://www.oschina.net/translate/dom-based-xss-of-third-kind


按注入位置分类:

  • 标签体内<div class="username">join<ScRipt sRc="https://xxx/hacker.js"></scRiPt></div>

  • 标签的属性<img class="anchor" src=" x" onerror="alert(document.cookie); ">

  • JavaScript数据域<script>var res_data = " data";alert(document.cookie); // ";<script>

  • URL参数<a href=" product.jsp?id=123"></a><script src="hacker.js"></script><a href=" " ></a>

  • CSS参数:*body { backgroud-image: url(" javascript: alert(document.cookie) "); }

跨站脚本攻击的利用及危害

  • 身份盗用。Cookie是用户对于特定网站的身份验证标志,XSS攻击可以盗取用户的cookie,从而利用该cookie盗取用户对该网站的操作权限。如果一个网站管理员用户的cookie被窃取,将会对网站引发巨大的危害。

  • 钓鱼欺骗。在页面中伪造一个登录或支付页面,欺骗用户输入账户密码信息,实现窃取用户敏感信息。

  • 网站挂马。攻击者利用Iframe标签嵌入隐藏的恶意网站,将被攻击者定向到恶意网站上、或弹出恶意网站窗口等方式,进行挂马攻击。

  • 蠕虫攻击。伪造请求,主动攻击更多用户、窃取敏感数据、发表非法评论、进行DDoS攻击,最终导致服务器瘫痪。

跨站脚本攻击的防护

服务端防范方法:

  • 对用户的输入输出进行过滤。推荐使用OWASP开源项目 ESAPI 对用户的输入输出进行过滤(官网下载API文档):

    • 针对标签内HTML:ESAPI.encoder().encodeForHTML( html )
    • 针对标签属性防护:ESAPI.encoder().encodeForHTMLAttribute( attr )
    • 针对JavaScript域:ESAPI.encoder().encoderForJavaScript( jscode )
    • 针对URL参数防护:ESAPI.encoder().encodeForURL( url )
    • 针对CSS参数防护:ESAPI.encoder().encoderForCSS( css )
  • Cookie设置HttpOnly和有效期。当Cookie设置为HttpOnly时,Cookie无法通过脚本读取,即使不小心中了XSS攻击,也不会被盗用身份。设置有效期后,万一Cookie泄露,可避免会话被长期盗用。

  • 限制用户输入数据长度和数据格式。恶意代码一般比正常数据长,限制字符长度,能有效防止危害较大的XSS攻击。当数据有固定格式时,拦截不符合格式的数据,能有效防止XSS攻击,还能提升应用健壮性。

  • 对用户的输入输出进行转义


客户端防范方法:

  • 慎重点击网页链接。只点击可信任网站域内链接,不点击指向其它网站的链接。浏览邮件、论坛文章、留言板留言时提高安全意识,可有效防范跨站脚本攻击。

  • 提高浏览器安全等级。及时升级浏览器,必要时在浏览器上禁用 JavaScript脚本的运行、限制操作 cookie的权限。此外,尽量采用主流Chrome、FireFox、Safari等浏览器,此类浏览器可检测部分跨站脚本攻击,更为安全。

  • 开启终端安全防护。即使跨站脚本被浏览器解释执行,终端上安装的防病毒系统、防火墙等安全软件,可拦截和阻止网页挂马等后续攻击行为。

相关文章

网友评论

    本文标题:开发安全规约(二)——防止跨站脚本攻击

    本文链接:https://www.haomeiwen.com/subject/ltfbuctx.html