存储型XXS介绍
概念
存储型XSS是指应用程序通过Web请求获取不可信赖的数据,并且在未检验数据是否存在XSS代码的情况下,将其存入数据库。当程序下一次从数据库中获取该数据时,致使页面再次执行XSS代码。存储型XSS可以持续攻击用户,在用户提交了包含XSS代码的数据存储到数据库后,每当用户在浏览网页查询对应数据库中的数据时,那些包含XSS代码的数据就会在服务器解析并加载,当浏览器读到XSS代码后,会当做正常的html和JS解析并执行,于是发生存储型XSS攻击。
什么是XXS代码?
加载完毕自动触发事件:<body onload="alert('xss')"></body>
使html某元素撑满整个页面:<p onclick="alert('1')" style="postion:fixed;width:100%;heith:100%"> </p>
增加属性触发事件(使用这个 页面一直弹弹窗,关闭不了): <input onfocus="alert('1')" autofocus/>
在iframe标签中使用Data URI scheme直接嵌入文本:<iframe src="data:text/html,<script>alert('1')</script>"></iframe>
常见案例
1、通过执行代码查询到对应的数据,未做任何处理直接进行展示:<%=data%>此处的data可能包含XXS代码。
2、在页面中直接通过el表达式:${data}、${da}都是存在安全漏掉的。
你如":下面ISPt设的能根据一个已知用广难()从属+询出该用的经名,示SP面上.S;Re(rs!null)rsnexti;address-rsgetstringCaddress:%>家庭地址:<%-address%>如:d地esg值出用担的,入数用没有业行合到的做验,那么者可以上面的代摄业行型S
反射型XXS介绍
概念
反射型XSS是指应用程序通过Web请求获取不可信赖的数据,并在未检验数据是否存在恶意代码的情况下,将其发送给用户。反射型XSS一般可以由攻击者构造带有恶意代码参数的URL来实现,在构造的URL地址被打开后,其中包含的恶意代码参数被浏览器解析和执行。这种攻击的特点是非持久化,必须用户点击包含恶意代码参数的链接时才会触发。
常见案例
下面JSP代码片段的功能是从HTTP请求中读取输入的用户名(username)并显示到页面。
请求:;body onload="alert('xss')"></body><%String name= reque("username"); %> 姓名: <%= name%>
XXS漏洞修复建议
修复建议
为了避免XSS攻击,建议采用以下方式进行防御:
1、对从数据库或其它后端数据存储获取不可信赖的数据进行合理验证(如年龄只能是数字),对特殊字符(如`<、>、'、"``<script>、javascript`等进行过滤。
2、根据数据将要置于HTML上下文中的不同位置(HTML标签、HTML属性、JavaScript脚本、CSS、URL),对所有不可信数据进行恰当的输出编码。可采用OWASP ESAPI对数据输出HTML上下文中不同位置,编码方法如下。ESAPI.encoder().encodeForHTML(inputData); HTML编码器ESAPI.encoder().encodeForHTMLAttribute(inputData); HTML属性编码器ESAPI.encoder().encodeForJavaScript(inputData); JavaScript编码器ESAPI.encoder().encodeForCSS(inputData); CSS编码器ESAPI.encoder().encodeForURL(inputData); URL编码器
3、设置HttpOnly属性,避免攻击者利用跨站脚本漏洞进行cookie劫持攻击。在Java EE中,给Cookie添加HttpOnly的代码如下:re("Set-Cookie","cookiename=cookievalue; path=/; Domain=domainvaule; Max-age=seconds; HttpOnly");
什么是HttpOnly?
如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。
什么是ESAPI ?
ESAPI是一个免费、开源的Web应用程序安全控制组件,可以帮助编程人员开发低风险应用程序String safe = ESAPI.encoder().encodeForHTML( reque( "input" ) );<% String img_url = "\" /><script>alert('xss')</script><img src=\"";<img src="<%=ESAPI.encoder().encodeForHTMLAttribute( img_src ) %>" />// out<img src="" /><script>alert('xss')</script><img src="" />
青锋开源产品
功能非常的多,开源多套系统,多个版本的内容,需要源码的朋友码云搜索青锋。或者私信留【V】。期待与您的一起交流。
开源产品包括且不限于:springboot、springcloud、vue、react、layui等等