| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> XSS跨站脚本(web应用)——XSS跨站脚本防御(三) -> 正文阅读 |
|
[网络协议]XSS跨站脚本(web应用)——XSS跨站脚本防御(三) |
本章目的 普及xss攻击常见防御方法与web安全编码规范 XSS Filter 什么是XSSFilter 过滤方法 两种过滤 输入验证是对输入的所有数据都须经过验证,验证所有输入数据的长度、类型、语法以及业务规则,被确认安全后才会存入数据库中;输出过滤在数据输出前,确保用户提交的数据被正确编码,建议对所有字符进行编码而不仅局限于某个子集。应用安全国际组织OWASP建议,防护XSS最佳的方法是结合输入验证和输出过滤。 输入过滤 输入验证 输入验证要根据实际情况来设计,下面是一些常见的检测和过滤 数据净化 当需要将一个字符串输出到Web网页时,同时又不确定这个字符串中是否包括XSS特殊字符(如>& ' "等),为了确保输出内容的完整性和正确性,可以使用编码(HTMLEncode)进行处理。 HTML编码在防止XSS攻击上起到很大的作用,它主要是用对应的HTML标记换为实体,这样做可确保浏览器显示实体,但不运行他们,将其当作HTML文档的内容而非结构加以处理。一些常见的可能造成问题的字符的HTML编码:
输出编码 输入过滤 结合使用输入过滤和输出编码能够提供两层防御,即使攻击者发现其中一种过滤存在缺陷,另一种 ? Web安全编码规范 在输出数据前对潜在威胁的字符进行编码、转义,是防御XSS攻击的有效措施。这些输出一般是动态内容。对Web应用而言,其动态内容可能来源于用户输入、URL、HTTP头、POST数据、Cookies的值、查询关键字等,所以,在应对不同背景下的动态内容的XSS攻击时,要部署不同的解决方案。 body文本 HTML标签中的内容 一些HTML标签如<input>、<style>、<color>等的属性值可能为动态内容,该情况下常存在XSS威胁。 <div>查询值:$query</div>或<input name="name"value="<?=$query?>"> 攻击者试图输入<、>等字符产生一个新的<script>标记: xss"><script>evil_script()</script> 然后,返回HTML代码如下: <input name="name"value="xss"><script>evil_script()</script>">> HTML标签中的内容 假设有以下的HTML代码片段: <input name="name"value=<?=$query?>> 恶意输入为: xss οnmοuseοver=evil_script() 渲染后的HTML代码如下: <input name="name"value=xss οnmοuseοver=alert(/xss/)> 当受害者移动光标到input输入栏时,脚本就会被执行。 <img onmouseover-"bigImg(this)"src="smiley.gif'alt="Smiley"> <script></script>中的内容 <script:></script>中的内容 解决方案: 尽量避免或减少在Javascript上下文中使用动态内容,稍不谨慎就会导致跨站脚本攻击。另外,在JavaScript中会出现</script>关键字与前面的<script>标签闭合,还有/**/等JavaScript注释也会被恶意利用,所以对这些字符要进行编码过滤。 ?' ??????? 转换????????????? \' "?????????????????????????????? \" \ ? ? ?????????????????????????? \\ /???????????????????????????????? \/ \n ????????????????????????????? \n \r????????????????????????????? \r JavaScript事件 考虑如下情况: <input type=button name=smt value='确定' οnclick='GotoUrl("<?=$targetUrl>");'> 恶意输入为: foo");evil script(" 返回的HTML代码为: <input type=button name=smt value='确定' οnclick='GotoUrl("foo");evil_script("");'> JavaScript事件 (小于号)转成81t; 总体来说,上述的编码规则实际上表达是同一个概念,即:将未信任数据嵌入到任何输出之前都应按照上下文的转义规则对其进行编码。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:21:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |