您的位置:首页 > 汽车 > 时评 > 软件系统app开发_应用市场下载安装软件_优化营商环境条例解读_进入百度官网

软件系统app开发_应用市场下载安装软件_优化营商环境条例解读_进入百度官网

2024/11/16 13:22:24 来源:https://blog.csdn.net/2402_87039650/article/details/143637616  浏览:    关键词:软件系统app开发_应用市场下载安装软件_优化营商环境条例解读_进入百度官网
软件系统app开发_应用市场下载安装软件_优化营商环境条例解读_进入百度官网

             xss的过滤和绕过

 

分类

 

过滤主要有两层,分别为WAF层和代码层,WAF(web应用防火墙)通常是在外部,在主机或者网络硬件上,对HTTP请求进行过滤拦截,而代码层是在编写web应用的过程中,直接实现或者音乐第三方库,对用户输入进行过滤,但是JavaScript语法非常灵活,所以对于普通的正则匹配,字符串比较,很难拦截xss。

 

 1.富文本过滤

 

在发送邮件或者博客的情景下,用户有需求实现富文本的编辑,比如插入超链接,图片,视频等资源。为了实现这种富文本编辑,大多数编辑器都允许用户直接编辑HTML,插入比如video标签,根据我们之前提到的xss的基本原理,这就引入了xss漏洞。常见的过滤方式是用户输入的标签进行限制,如果采用黑名单的方式,我们可以寻找黑名单中遗漏的标签,在https://portswigger.net/web-security/cross-site-scripting/cheat-sheet这个表中列举了大量的可以用于执行JavaScript的标签和属性,并给出了适用于哪些浏览器

 

如果过滤器本身存在缺陷,比如将黑名单内容替换为空,我们可以采用喜闻乐见的双写绕过(只适用于非常简单的一种情况)

 

```php

<?php

    function filter($payload){

    $data=str_replace("script","",$payload);

 return $data;

}

$name=filter($_GET['name']);

echo "hello $name";

```

 

这段代码试图通过str_replace函数移除"script"字符串,输入name=name=<scriscriptpt>alert('xss')</scricriptpt>

 

2.注入点在标签属性中

 

如果没有过滤"<"和">",可以直接引入新的标签,如果尖括号被过滤,可以插入新的事件属性,比如onload,onmousemove等。而且标签的属性字段支持HTML编码,可以通过这个来绕过一些过滤。

 

比如

 

```

< img src=x οnerrοr="&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;">

```

 

这里onerror的内容就是对alert(1)进行HTML编码之后的结果,最后仍然可以成功触发弹窗。

 

src=x表示一个不存在路径,然后onerror,需要用一些工具对这个字符串进行HTML编码,通过HTML编码绕过过滤

 

 3.注入点在script标签中

 

如果注入点被引号包裹,可以像绕过sql注入一样,先闭合引号再用分号结束语句之后插入代码

 

如果引号也被过滤,且一行存在两个注入点的情况下

 

var url = 'http://xxxx/?name=<?=$name?>'+'<?=$address?>'

可以用反斜杠使得第一个引号被转义,从第二个引号开始插入我们的代码

 

var url = 'http://xxxx/?name=\'+';alert(1);\\'

 

如果存在单词黑名单,比如不允许出现eval等字符,可以使用unicode编码绕过

 

4.CSP过滤及其绕过

 

1.CSP(Content Security Policy,内容安全策略)是一个额外的安全层,用于检测并缓解某些特定类型的注入,包括XSS和数据注入等。

CSP被设计成完全向后兼容。不支持CSP的浏览器会忽略相关策略,并正常运行,采用默认的同源策略。

为了使CSP可用,需要配置HTTP头部配置Content-Security-Policy字段,除此之外还可以使用Meta标签来配置该策略。

从前面的例子可以看出,XSS防御绝非易事,CSP应运而生。CSP可以看作是为了防备XSS,额外添加的一些页面渲染和javascript执行的规则。

具体的策略文档可以在https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy这里找到

 

2.如果我们配置下面的请求头

 

```php

<?php

    header("Content-Security-Policy;script-src'self'");

?>

```

 

这表示CSP策略要求,网站的script来源只能是当前域名下的资源,内联和外链的script将禁止执行。

 

3.Content-Security-Policy: <policy-directive>;<policy-directive>

 

指令:获取指令、文档指令、导航指令

connect-src 定义了请求、XMLHttpRequest、WebSocket 和 EventSource 的连接来源

 

font-src 设置允许通过@font-face加载的字体源地址

 

frame-src 设置允许通过类似<frame>和<iframe>标签加载的内嵌内容的源地址 

 

img-src 限制图片和图标的源代码

 

child-src 定义了web workers以及嵌套的浏览上下文(如<frame>和<iframe>)的源

 

media-src 限制通过<audio> <video> 或<track>标签加载的媒体文件的源代码

 

object-src 限制<object> <embed> <applet>标签的源地址

 

script-src 限制JavaScript的源地址

 

default-src 默认的加载策略

 

4.绕过script-src'self',self"意味着只允许加载同域名目录下的脚本。所以我们可以寻找文件上传(可以绕过cell或者使用jsonp接口)或jsonp接口(跨域用的)

 

需要注意的是,如果图片上传接口,即访问资源时Content-Type为image/png,浏览器会拒绝将其作为脚本来执行。

而JSONP接口通常采用?callback=xxxx的方式传递参数

 

如:xxx({"result":"success"})

当使用类似alert(1); // alert(1) ((“result”:”success”) )这样的代码进行传参时,会产生特定的返回结果。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com