XSS跨站攻击

跨站脚本攻击,Cross Site Script。攻击者通过“HTML注入”,篡改网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

存储型,出现在让用户输入数据,供用户查看的地方。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面就可能受到攻击。反射型,将数据输入应用程序后直接输出脚本内容,用户点击恶意链接就可能受到攻击。

构造数据:'onclick = alert(document.domain) // 。"> <script>alert(document.domain);</script>。'><img src=......../><'。

如何防范:

Secure By Default”,不要在页面中插入任何不可信数据。之所以有这样一条原则存在,是因为HTML里有太多的地方容易形成XSS漏洞,而且形成漏洞的原因又有差别,比如有些漏洞发生在HTML标签里,有些发生在HTML标签的属性里,还有的发生在页面的<Script>里,甚至有些还出现在CSS里,再加上不同的浏览器对页面的解析或多或少有些不同,使得有些漏洞只在特定浏览器里才会产生。如果想要通过XSS过滤器(XSS Filter)对不可信数据进行转义或替换,那么XSS过滤器的过滤规则将会变得异常复杂,难以维护而且会有被绕过的风险。

输入检查和安全编码

对于HTML标签之间时,对这些数据进行HTML Entity编码

<body>HTML Entity编码</body>/<div>/<p>/<a>。HTML Entity编码是对&,<,>,",',/,6个特殊字符进行编码

String encodedContent =

ESAPI.encoder().encodeForHTML(request.getParameter(“input”));

对于HTML属性时,对这些数据进行HTML属性编码

String encodedContent =

ESAPI.encoder().encodeForHTMLAttribute(request.getParameter(“input”));

HTML里有太多的地方容易形成XSS漏洞,而且形成漏洞的原因又有差别,比如有些漏洞发生在HTML标签里,有些发生在HTML标签的属性里,还有的发生在页面的<Script>里,甚至有些还出现在CSS里,再加上不同的浏览器对页面的解析或多或少有些不同,使得有些漏洞只在特定浏览器里才会产生。如果想要通过XSS过滤器(XSS Filter)对不可信数据进行转义或替换,那么XSS过滤器的过滤规则将会变得异常复杂,难以维护而且会有被绕过的风险。里,甚至有些还出现在CSS里,再加上不同的浏览器对页面的解析或多或少有些不同,使得有些漏洞只在特定浏览器里才会产生。如果想要通过XSS过滤器(XSS Filter)对不可信数据进行转义或替换,那么XSS过滤器的过滤规则将会变得异常复杂,难以维护而且会有被绕过的风险。

在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码

String encodedContent =

ESAPI.encoder().encodeForJavaScript(request.getParameter(“input”));

CSS:

String encodedContent =

ESAPI.encoder().encodeForCSS(request.getParameter(“input”));

URL:

String encodedContent =

ESAPI.encoder().encodeForURL(request.getParameter(“input”));

使用富文本时,使用XSS规则引擎进行编码过滤

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容