千家信息网

web安全之XSS

发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,一、浏览器安全1、同源策略(SOP)在浏览器中,、、、等标签都可以跨域加载资源,而不受同源限制。这些带src属性的标签每次加载时,实际上是有浏览器发起了一次GET请求。不同于XMLHttpReques
千家信息网最后更新 2025年01月21日web安全之XSS

一、浏览器安全

1、同源策略(SOP

在浏览器中,;

再查看源码:

;

2.1.2、存储型XSS

***会把用户的数据存储在服务器端。

比较常见的场景是:***写了一篇包含有恶意JavaScript代码的博客文章,只要用户访问改文章,就会在他们的浏览器中执行这段恶意代码,***会把恶意代码保存到服务器端。所以这种方式也叫持久型XSSPersistent XSS)。

2.1.3DOM Based XSS

通过修改页面的DOM节点形成XSS,称之为DOM Based XSS

代码如例:



id = "t"

type="text" id="text" value="" />
type="button" id="s" value="write" />

正常构造数据,www.a.com

点击write按钮:页面显示www.a.com链接

非正常构造如下数据:

' onclick=alert(/xss/) //

点击write按钮,页面显示testlink,点击testlink,弹出/xss/警告框

这里首先一个单引号闭合掉href第一个单引号,然后插入一个onclick事件,最后再用注释符注释掉第一个单引号。

这段代码也可以通过闭合掉的方式***:

'><'

此时页面代码变成了:

<' '>testlink

2.2 XSS防御

2.2.1 HttpOnly

设置cookie httponly标记,可以禁止JavaScript访问带有该属性的cookie,目前主流的浏览器已经支持HttpOnly

2.2.2 输入检查

2.2.3 输出检查

安全的编码函数:在数据添加到DOM时候,我们可以需要对内容进行HtmlEncodeJavaScriptEncode,以预防XSS***。 JavaScriptEncode 使用"\"对特殊字符进行转义,除数字字母之外,小于127的字符编码使用16进制"\xHH"的方式进行编码,大于用unicode(非常严格模式)。除了HTMLEncodeJavaScriptEncode外还有XMLEncodeJSONEncode等编码函数,在php中有htmlentities()htmlspcialchars()两个函数可以满足要求。

XSS***主要发生在MVC架构的view层,大部分的XSS漏洞可以在模板系统中解决。

python的开发框架Django自带的模板系统中,可以使用escape进行htmlencode,比如:

{{ var | escape }}

这样写的变量,会被HtmlEncode

2.2.4 正确防御XSS

场景一:在HTML标签中输出

$var

$var

所有在标签中输出的变量,如果未做任何处理,都会导致直接产生XSS

在这种场景下,XSS的利用方式一般构造一个

或者

防御的方式是对变量使用HtmlEncode

场景二:在HTML属性中输出

与在HTML标签中输出类似,可能的***方式

<"" >

防御的方法也是HtmlEncode。

OWASP ESAPI中推荐课一个更严格的HTMLEncode--除了字幕、数字外,其他所有字符都被编码成HTMLEntities

String safe=ESAPI.encoder().encodeForHTMLAttribute(request.getParameter("input"));

场景三:在

***者需要闭合引号才能实施***

防御时使用JavascriptEncode

场景四:在事件中输出

在事件中输出和在

0