反射xss被浏览器拦截(xss攻击拦截)

今日笑话 2022年05月29日
本文导读目录:

浏览器的Xss过滤器机制是什么,为什么有些反射型Xss不会触发过滤器

首先要说明的是 它是webkit的一个模块,而非chrome ,所以Safari和360安全浏览器极速模式等webkit内核的浏览器都有XSS过滤功能.

过滤方式:

通过模糊匹配 输入参数(GET query| POST form data| Location fragment ) 与 dom树,如果匹配中的数据中包含跨站脚本则不在输出到上下文DOM树中.另外,匹配的规则跟CSP没有什么关系,最多是有参考,CSP这种规范类的东西更新速度太慢跟不上现实问题的步伐.

关闭模式:

因为它有可能影响到业务,所以浏览器提供了关闭它的HTTP响应头.

X-XSS-Protection: 0

绕过方式:

因为专门做这方面的原因所以对绕过也有所了解,目前我发布过的一个bypass 0day还可以继续使用.

svgscript xlink:href=data:,alert(1)/script/svg

XSS攻击的定义,类型以及防御方法?

XXS攻击全称跨站脚本攻击,是一种在Web应用中的计算机安全漏洞,它允许恶意Web用户将代码植入到提供给其他使用的页面中。

XSS攻击有哪几种类型?下面就由锐速云的小编为大家介绍一下

经常见到XSS攻击有三种:反射XSS攻击、DOM-based型XSS攻击以及储存型XSS攻击。

[if !supportLists]1、[endif]反射型XSS攻击

反射性XSS一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计链接的时候,恶意代码会直接在受害主机上的浏览器上执行,反射型XSS通常出现在网站搜索栏,用户登入口等地方,常用来窃取客户端或进行钓鱼欺骗。

[if !supportLists]2、[endif]存储型XSS攻击

存储型XSS攻击也叫持久型XSS,主要将XSS代码提交储存在服务器端(数据库,内存,文件系统等)下次请求目标页面时不用在提交XSS代码。当目标用户访问该页面获取数据时,XSS代码会从服务器解析之后加载出来,返回到浏览器做正常的HTML和JS解析执行,XSS攻击就发生了。储存型XSS一般出现在网站留言,评论,博客日志等交互处,恶意脚本储存到客户端或者服务端的数据库中。

[if !supportLists]3、[endif]DOM-based型XSS攻击

DOM-based型XSS攻击它是基于DOM的XSS攻击是指通过恶意脚本修改页面的DOM结构,是纯粹发生在客户端的攻击。DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞。

如何防御XSS攻击?

[if !supportLists]1、[endif]对输入内容的特定字符进行编码,列如表示html标记等符号。

[if !supportLists]2、[endif]对重要的cookie设置httpOnly,防止客户端通过document。cookie读取cookie,此HTTP开头由服务端设置。

[if !supportLists]3、[endif]将不可信的输出URT参数之前,进行URLEncode操作,而对于从URL参数中获取值一定要进行格式检查

[if !supportLists]4、[endif]不要使用Eval来解析并运行不确定的数据或代码,对于JSON解析请使用JSON。Parse()方法

[if !supportLists]5、[endif]后端接口也应该要做到关键字符过滤的问题。

如何绕过 浏览器xss filter

反射xss利用方法,绕过IE XSS Filter

假设 1.php页面代码如下:

echo $_GET['str'];

使用IE浏览器访问该页面

1.php?str=xss code

由于xss filter渲染 导致XSS不成功

接下来我们要这么绕过呢?

如果该站点 可以发帖、友情链接等等 只要能发链接地址其实不只发链接 嘿嘿。

由于IE XSS FILTER 只是检测 referer 是否来自本源,如果来自本源 则 Ie XSS FILTER则不生效。你现在明白了吧

在javascript: date: 等协议无效的情况下:

a href="http://www.lyyha.com/1.php?str=xss code"求友情链接/a

IE用户点击即可中招(其他部分浏览器也中招)

程序员需要具备哪些东西?

程序员必须要了解的web安全

1.简述

互联网本来是安全的,自从有了研究安全的人之后,互联网就变得不安全了。

1.1什么是安全?

字典的解释是指没有受到威胁、没有危险、危害、损失。

1.2什么情况下会产生安全问题?

类似我们在机场,火车站里面,乘客开始上车之前,都会有一个必要的程序:安全检查。如果没有安全检查我们就会产生我们所谓的安全问题。在安全检查中我们会检查乘客身上是否携带了打火机,可燃液体等危险物品。

从上面我们看出为什么我们会有安全检查呢?归根结底还是信任问题。因为我们的信任关系被破坏,从而产生了安全问题。

1.3怎么进行有效的安全评估?

一个安全评估过程,可以简单地划分为4个阶段:资产等级划分,威胁分析,风险分析,确认解决方案。

资产等级划分:明确我们目标是什么,要保护什么。互联网安全的核心问题,其实是数据安全问题。用户的数据也就是我们需要保护的。

威胁分析:找到所有可能造成危害的来源,一般采用头脑风暴列举所有的情况。

风险分析:预估造成的损失大小。

确认解决安全方案:安全评估的产出物,就是确认安全解决方案。解决方案一定要有针对性,这种针对性是由资产等级划分,威胁分析,风险分析,确认解决方案。

2.浏览器安全

近年来随着互联网的发展,人们发现浏览器才是互联网最大的入口,绝大多数用户使用互联网的工具是浏览器。因此浏览器市场的竞争也日趋白热化。浏览器安全在这种激烈竞争的环境中被越来越多的人所重视。

2.1同源策略

浏览器的安全都是以同源为基础,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。

浏览器的同源策略,限制了来自不同源的“document”或脚本,对当前"document"读取或设置某些属性。

这一策略很重要,试想一下如果没有同源策略,可能a.com的一段JS脚本,在b.com未曾加载此脚本时,也可以随意涂改b.com的页面。为了不让浏览器的页面行为发生混乱,浏览器提出了“Origin”这一概念,来自不同Origin的对象无法互相干扰。

影响“源”的因素有:host,子域名,端口,协议。

2.2恶意网址拦截

恶意网址拦截的工作原理很简单,一般都是浏览器周期性地从服务器端获取一份最新的恶意网址黑名单,如果用户上网时访问的网址存在于此黑名单中,浏览器就会弹出一个警告页面。

3.跨站脚本攻击

跨站脚本攻击(XSS)是客户端脚本安全中的头号大敌。

XSS:跨站脚本攻击,英文名称是Cross Site Script,本来缩写是CSS,为了和层叠样式的CSS有所区别,所以在安全领域叫“XSS”。

3.1XSS攻击

XSS攻击,通常指黑客通过“HTML注入”篡改可网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。举个例子:某个黑客发表了一篇文章其中包含了恶意的JS代码,所有访问这篇文章的人都会执行这段JS代码,这样就完成XSS攻击。

3.2反射型XSS

反射型XSS只是简单地把用户输入的数据反射给浏览器。也就是说,黑客往往需要引诱用户点击一个而已连接,才能攻击成功

3.3存储型XSS

存储型会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。黑客把恶意的脚本保存到用户的服务器端,所以这种攻击就是存储型,理论上来说,它存在的时间是比较长的。

3.4 XSS的防御

XSS的防御是复杂的。

3.4.1 HttpOnly

HttpOnly最早是由微软提出,并在IE6中实现的,至今已经逐渐成为了一个标准。浏览器将禁止页面的JS访问带有HttpOnly属性的Cookie。

其实严格地说,HttpOnly并非为了对抗XSS——HttpOnly解决的是XSS后的Cookie劫持攻击。HttpOnly现在已经基本支持各种浏览器,但是HttpOnly只是有助于缓解XSS攻击,但仍然需要其他能够解决XSS漏洞的方案。

3.4.2 输入检查

在XSS的防御上,输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如,等等。如果发现这些字符,则将字符过滤或者编码。这种输入检查的方式,可以叫“XSS Filter”。互联网上于很多开源的“XSS Filter”的实现。

XSS Filter在用户提交数据时获取变量,并进行XSS检查;但此时用户数据并没有结合渲染页面的HTML代码,因此XSS Filter对语境的理解并不完整。甚至有可能用户输入13,直接会把符号给过滤掉,所以一个好的XSSFilter是比较重要的。

3.4.3输出检查

一般来说,除了富文本的书除外,在变量输出到HTML页面时,可以使用编码火转移的方式来防御XSS攻击。和输入检查差不多。

如何防止xss攻击,需要过滤什么

XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

一、HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

我们来看下百度有没有使用。

未登录时的Cookie信息

可以看到,所有Cookie都没有设置HttpOnly,现在我登录下

发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

下面我用PHP来实现下:

?php

header("Set-Cookie: cookie1=test1;");

header("Set-Cookie: cookie2=test2;httponly",false);

setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);

setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);

?

script

alert(document.cookie);

/script

js只能读到没有HttpOnly标识的Cookie

二、输入检查

输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如、、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

例如网站注册经常用户名只允许字母和数字的组合,或者邮箱电话,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:

$filter = new lib_filter();

echo $filter-go('1+11');

它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。

三、输出检查

大多人都知道输入需要做检查,但却忽略了输出检查。

1、在HTML标签中输出

如代码:

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

?

div?=$b?/div

a href="#"?=$a?/a

这样客户端受到xss攻击,解决方法就是对变量使用htmlEncode,php中的函数是htmlentities

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

?

div?=htmlentities($b)?/div

a href="#"?=htmlentities($a)?/a

2、在HTML属性中输出

div id="div" name ="$var"/div

这种情况防御也是使用htmlEncode

在owasp-php中实现:

$immune_htmlattr = array(',', '.', '-', '_');

$this-htmlEntityCodec-encode($this-immune_htmlattr, "\"script123123;/script\"");

3、在script标签中输出

如代码:

?php

$c = "1;alert(3)";

?

script type="text/javascript"

var c = ?=$c?;

/script

这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php方法来实现

$immune = array("");

echo $this-javascriptCodec-encode($immune, "\"abc;alert(123);//");

最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F

4、在事件中输出

a href="#" onclick="funcA('$var')" test/a

可能攻击方法

a href="#" onclick="funcA('');alter(/xss/;//')"test/a

这个其实就是写在script中,所以跟3防御相同

5、在css中输出

在owasp-php中实现:

$immune = array("");

$this-cssCodec-encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');

6、在地址中输出

先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent方法。

在owasp-php中实现:

$instance = ESAPI::getEncoder();

$instance-encodeForURL(‘url’);

四、处理富文体

就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此最好使用成熟的开源框架来检查。php可以使用htmlpurify

五、防御DOM Based XSS

DOM Based XSS是从javascript中输出数据到HTML页面里。

script

var x = "$var";

document.write("a href='"+x+"'test/a");

/script

按照三中输出检查用到的防御方法,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。

防御方法:首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。

会触发DOM Based XSS的地方有很多:

document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()

Chrome 是怎么过滤反射型 XSS 的呢

首先要说明的是 它是webkit的一个模块,而非chrome ,所以Safari和360安全浏览器极速模式等webkit内核的浏览器都有XSS过滤功能.

过滤方式:

通过模糊匹配 输入参数(GET query| POST form data| Location fragment ) 与 dom树,如果匹配中的数据中包含跨站脚本则不在输出到上下文DOM树中.另外,匹配的规则跟CSP没有什么关系,最多是有参考,CSP这种规范类的东西更新速度太慢跟不上现实问题的步伐.

关闭模式:

因为它有可能影响到业务,所以浏览器提供了关闭它的HTTP响应头.

X-XSS-Protection: 0

绕过方式:

因为专门做这方面的原因所以对绕过也有所了解,目前我发布过的一个bypass 0day还可以继续使用.

svgscript xlink:href=data:,alert(1)/script/svg

我来说两句
黑客技术 2年前 (2022-05-29) | 回复
:安全评估的产出物,就是确认安全解决方案。解决方案一定要有针对性,这种针对性是由资产等级划分,威胁分析,风险分析,确认解决方案。2.浏览器安全近年来随着互联网的发展,人们发
黑客技术 2年前 (2022-05-29) | 回复
e('cookie3','test3',NULL,NULL,NULL,NULL,false);setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);?scriptalert(document.cookie)
黑客技术 2年前 (2022-05-30) | 回复
来检查。php可以使用htmlpurify五、防御DOM Based XSSDOM Based XSS是从javascript中输出数据到HTML页面里。scriptvar x = "$var";document.write("a h
黑客技术 2年前 (2022-05-29) | 回复
ow.x?0:(alert(/XSS/),window.x=1));');6、在地址中输出先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent方法。在owasp-php中实现