WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS))
XSS(Cross Site Script)跨站脚本攻击。是指攻击者向被攻击Web 页面里插入恶意html代码,当用户浏览该页之时,嵌入其中的HTML代码会被执行,从而达到攻击的特殊目的。XSS和CSRF(Cross site request forgery)合称Web 杀手组合。黑客洞穿页面逻辑,使输入的内容被按照期望内容展示出来,从而达到欺骗或攻击用户的效果。常见的xss攻击类型有存储xss攻击和反射型xss攻击。
存储型XSS(Stored XSS)
存储型xss是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能。

图 1 存储型xss攻击示例
1. 用户A修改个人信息,并将带有威胁性的js代码作为个人信息发送到server端;
2. server端未加过滤将用户资料存储到服务器;
3. 用户B在好友列表中看到用户A,并查看用户A个人资料;
4. server端取出用户A资料返回到web前端;
5. 前端按照预先规则展示,其中包含了用户A带有html标签和js的前端可执行代码,从而在用户B机器上执行了用户A预先设定好的任意威胁性的代码。
例如用户A修改用户备注为:<script>alert("haha");</script>,按照上述流程用户B的页面上执行这段代码。
举个例子,黑客预先调查某bbs展示帖子内容的代码逻辑,然后发帖:

提交之后,出现在帖子列表:

当其他用户点击帖子查看时,悲剧发生了:
,还好,只是恶作剧。
解决方案
1. 做xss过滤,将一些不合理的标签(例如:< > % /)做转义或者过滤,在存入DB前做xss过滤要比展示前做xss过滤更有效。
2. 限制用户输入的字符,比如:码只允许\s = whitspace: \t\n\x0B\f\r,\w = word: a-zA-Z_0-9
反射型XSS(Reflected XSS)
如果server端未做输入参数的过滤或者过滤不完整导致用户的输入数据可能返回到前端页面,Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。

图 2 反射型xss示例
1. 用户A构造参数值带有js代码URL,并将URL发给好友B,告诉他可以参与活动;
2. 好友B收到请求后发现是官方的URL,于是点击URL;
3. server端未严格校验请求参数,将参数直接返回到前端页面;
4. 参数中的js代码随着html返回到用户B浏览器并得以执行。
例如某网站输入用户信息后,服务器校验输入有误,返回错误页面并“友好”的将错误内容展示给用户看,例如:

用户将带有攻击性的URL做为输入源,例如:<img src="www.xxx.com"/>,服务端会跳转到对应的错误页,如下:

这样www.xxx.com里的恶意js会被执行。
黑客可以将提交请求的URL进行进行包装或者直接暴露URL,用户通常看到可信任网站的URL会不加防范的点击,从而造成损失,例如上述可以暴露给用户URL:
解决方案:
同存储型xss攻击。
WebGoat学习——跨站脚本攻击(Cross‐Site Scripting (XSS))的更多相关文章
- 跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))实践
作者发现博客园在首页显示摘要时未做html标签的过滤,致使摘要中的html代码可以被执行,从而可以注入任何想要被执行的js代码,作者利用这一缺陷在本文摘要中插入了一段js代码执行alert弹窗,同时增 ...
- XSS 跨站脚本攻击(Cross Site Scripting)
xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻击中,通过插入恶意 ...
- 跨站脚本攻击XXS(Cross Site Scripting)修复方案
今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...
- Web安全之XSS(Cross Site Scripting)深入理解
XSS的含义 XSS(Cross Site Scripting)即跨站脚本.跨站的主要内容是在脚本上. 跨站脚本 跨站脚本的跨,体现了浏览器的特性,可以跨域.所以也就给远程代码或者第三方域上的代码提供 ...
- XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)
本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...
- Healwire Online Pharmacy 3.0 Cross Site Request Forgery / Cross Site Scripting
Healwire Online Pharmacy version 3.0 suffers from cross site request forgery and cross site scriptin ...
- python---xss(Cross Site Scripting)跨站脚本攻击和csrf(xsrf)跨站点请求伪造(Cross—Site Request Forgery)攻击
xss跨站脚本攻击:恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的. 例如:某些论坛允许用户自由发言,而 ...
- DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting
反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...
随机推荐
- Combiner
如果job 设置了 combiner ,则job的每个map运行的数据会先进入combiner,然后再通过patitioner分发到reduce.通过combiner能减少reduce的计算.空间压力 ...
- log log4net用代码记录日志
log4net 用代码记录日志 今天在开发项目的时候,遇到跨域调用log4net中的类,出现了一个bug,提示LogImpl未标记可序列化,此时,我靠,麻烦了,这个类又不是咱们自己的,改源码我想应该 ...
- php数据库操作常用相关函数
MySQL访问函数都需要有相应的权限才能运行.常用的相关函数介绍如下: (1)integer mysql_connect(主机,用户名,口令); 此函数开始一个对指定主机上的MySQL数据库的连接.若 ...
- android 设置控件的颜色,字体
1.用代码设置控件的颜色: int b = getResources().getColor(R.drawable.blue);//得到配置文件里的颜色 mButton.setTextCo ...
- python 中的集合(set) 详解
在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种. 创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方 ...
- [POJ1631]Bridging signals (DP,二分优化)
题目链接:http://poj.org/problem?id=1631 就是求一个LIS,但是范围太大(n≤40000),无法用常规O(n²)的朴素DP算法,这时需要优化. 新加一个数组s[]来维护长 ...
- leetcode:Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...
- 爬虫技术(四)-- 简单爬虫抓取示例(附c#代码)
这是我的第一个爬虫代码...算是一份测试版的代码.大牛大神别喷... 通过给定一个初始的地址startPiont然后对网页进行捕捉,然后通过正则表达式对网址进行匹配. List<string&g ...
- 概述hibernate入门安装配置
1.jdbc连接的优缺点 JDBC的优点 直接底层操作,提供了很简单.便捷的访问数据库的方法,跨平台性比较强.灵活性比较强,可以写很复杂的SQL语句. JDBC的缺点 1).因为JAVA是面向对象的, ...
- svn:revert to this version 和 revert changes from this version的区别
假设我们有许多个版本,版本号分别是1-10 如果我们在7这里选择revert to this version那么7之后的8,9,10的操作都会被消除 如果在7选择revert changes from ...