网站301在哪做,沈阳网站建设推广平台,wordpress首页短代码,毕业网站设计原理#xff1a;
这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能#xff0c;在HTML页面里嵌入恶意代码。当用户浏览改页时#xff0c;这些潜入在HTML中的恶意代码会被执行#xff0c;用户浏览器被攻…原理
这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能在HTML页面里嵌入恶意代码。当用户浏览改页时这些潜入在HTML中的恶意代码会被执行用户浏览器被攻击者控制从而达到攻击者的特殊目的如 cookie窃取等。
主要因为系统对输入或输出的时候控制不够严格导致攻击者输入精心构造的语句导致浏览器把输入的内容当成了JS代码执行从而实现js代码的执行。
分类
数据交互富文本编辑标签插入和自定义等位置
数据输出用户资料关键词标签说明等页面输入位置
用户输入数据只要在界面显示即可能存在xss跨站脚本攻击
Script标签内 scriptvar‘xxxx’/script
Html标签内 img srcx οnerrοralert(1)
反射型
反射型XSS又称非持久型XSS其经过后端不经过数据库无法持久攻击。反射型xss攻击是一次性的仅对当次的页面访问产生影响。反射型xss攻击要求用户访问一个被攻击者篡改后的链接用户访问该链接时被植入的攻击脚本被用户游览器执行从而达到攻击目的。
存储型
存储型XSS又称持久性XSS因为其内容存储在目标服务器数据库或文件中可以持久触发。攻击者在论坛、博客、留言板发帖的过程中嵌入XSS攻击代码帖子被目标服务器存储在数据库中。当用户进行正常访问时触发XSS代码。
DOM型
全称Document Object Model DOM类型不经过后端使用DOM动态访问更新文档的内容、结构及样式。服务器响应不会处理攻击者脚本而是用户浏览器处理这个响应时DOM对象就会处理XSS代码触发XSS漏洞。
反射型
正常访问可以看到如下源代码信息此时会把username参数like打印到前端此时后台未进行任何过滤和编码 可以看到当我们输入script标签即可执行js代码当我们未设置安全属性httponly可以获取cookie进而盗取身份。此时数据经过了后端但是数据并未存储在数据库或文件中攻击者只能将url发送给目标目标访问了才能触发漏洞。 存储型
漏洞一般存在于留言板等位置这里我们可以将留言信息修改为js代码 当我们提交的内容被存储在数据库中时这样攻击者可以把攻击代码存储在数据库中这样任何用户只要访问到了这个存在漏洞的网址时就会触发漏洞执行js代码危害程度要大于反射型注入攻击 DOM型
每个载入浏览器的 HTML 文档都会成为Document对象。Document对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。当我们代码中存在如下DOM属性的时候需要格外注意如果参数可控则可能存在xss
可能触发DOM型xss属性
1. document.referer 属 性 2. window.name 属 性 3. location 属 性 4. innerHTML 属 性 5. documen.write 属性 案例场景
场景一文本
当前端输入数据未经任何处理就在页面进行输出如果数据位于文本区域则可以直接添加script标签添加js语句执行。 防御方式HTML编码 场景二标签
当数据未经处理直接在前台展示则攻击者首先可以使用”来闭合前面标签变为link relcanonical href
然后就可以插入scriptalert(1)/script执行js代码然后使用“闭合后面的”防止页面出错。这样就可以插入任意js语句防御方式HTML编码。
scriptalert(1)/script 场景三标签
如果代码仅仅是简单的过滤不允许符号但是未过滤”则攻击者可以在标签中通过闭合之前的事件并添加新的事件进而执行任意js代码 logo.png“ οnlοadalert(1)“ “
img srclogo.png οnlοadalert(1) /logo.png width336 height36 场景四标签
如果对”进行了过滤但是可以使用伪协议JavaScript进行绕过这里可以使用javascript:alert(1)来执行js语句。 所以仅仅对特殊符号过滤还存在风险所以在编码过程中如果是经过服务器数据然后再前台打印的需要进行html编码操作 场景五script
当一些特殊情况前端传入的字符串会出现在script标签中这个时候要使用js编码不能使用html编码因为html编码不会对转义符/进行编码这样攻击者可以使用注释符闭合标签再通过后面的注入点拼凑出一个js脚本攻击链。 场景六DOM
当存在DOM xss漏洞此类攻击多数以反射xss为主此类攻击需要对通过dom事件获取到的内容进行js编码防止执行js代码 XSS防御
我们可以使用owasp的htmlencode和jsencode Encode.forHtml(request.getParameter(username));
Encode.forJavaScript( request.getParameter(hrefurl) );
htmlencode
Html编码会将输入字符“,,,,’进行编码编码为#34;,amp;,lt;,gt;,#39;
字符串被编码后浏览器会将其作为字符串解析而不会影响整个html的结构浏览器显示时会进行解码所以显示不会受到影响。
但是要注意不能防御标签内的伪协议和DOM类型的xss JavaScriptencode
使用html编码不会对\编码造成后面的”被转义 使用js编码可以对\,/.’,”,等特殊符号进行编码可以防止前端数据出现在script标签中通过闭合标签或转义等手段执行js代码。
但是要注意没有编码:符号,所以不能防御伪协议执行js代码 特殊情况
当存在a标签如果其中的href内容可以由前端控制即便做了html编码也无法防御因为html编码不会对伪协议进行处理则需要服务器对内容进行过滤判断字符串中是否存在javascript:如果存在则阻止
当存在DOM xss漏洞则需要在前端js中对dom中获取到的数据进行过滤可以对获取到的内容进行js编码或者根据场景对获取的内容进行过滤
总结
在我们的测试中任何前端可以被控制的位置都可能存在XSS所以在测试中要对每一个输入点进行测试如果过滤不强或者过滤方法错误则可以根据对应情况进行绕过这个就要根据实际环境进行测试下面时我们编写代码的时候需要注意的地方可以有效防御xss
当参数的内容需要在前端显示显示位置如果不在script标签中并且不在a href中则使用html编码如果内容需要在script脚本中进行拼接则对获取数据进行js编码另外如果内容是直接交给eval执行此类数据需要严格过滤。当数据位于a href中除了要做html编码外还要对数据进行伪协议过滤过滤javascript:防止通过伪协议执行脚本代码当注入存在DOM中则需要对事件获取到的参数进行过滤可以选择js编码或者根据实际的场景进行灵活过滤。