做网站建设哪家便宜,深圳品牌网站建设公司,荆门哪里有专门做企业网站的,网站建设对称对比型XSS攻击防御XSS Filter过滤方法输入验证数据净化输出编码过滤方法Web安全编码规范XSS Filter
XSS Filter的作用是通过正则的方式对用户#xff08;客户端#xff09;请求的参数做脚本的过滤#xff0c;从而达到防范XSS攻击的效果。 XSS Filter作为防御跨站攻击的主要手段之…
XSS攻击防御XSS Filter过滤方法输入验证数据净化输出编码过滤方法Web安全编码规范XSS Filter
XSS Filter的作用是通过正则的方式对用户客户端请求的参数做脚本的过滤从而达到防范XSS攻击的效果。 XSS Filter作为防御跨站攻击的主要手段之一已经广泛应用在各类Web系统之中包括现今的许多应用软件例如Chrome浏览器通过加入XSS Filter功能可以有效防范所有非持久型的XSS攻击攻击。
过滤方法
防御跨站脚本攻击的方式一般有两种Input Filtering和Output Filtering分别在输入端Input和输出端Output进行过滤即输入验证和输出过滤。输入验证是对输入的所有数据都须经过验证验证所有输入数据的长度、类型、语法以及业务规则被确认安全后才会存入数据库中输出过滤在数据输出前确保用户提交的数据被正确编码建议对所有字符进行编码而不仅局限于某个子集。应用安全国际组织OWASP建议防护XSS最佳的方法是结合输入验证和输出过滤。
输入过滤永远不要相信用户的输入是对设计人员和编码人员说的是进行安全设计和安全编码的重要准则。换句话说任何输入数据在证明其无害之前都是有害的。许多危险的漏洞就是因为过于相信用户的输入是善意的而导致的。对输入数据的过滤具体可以从两方面着手输入验证和数据净化。输入验证输入验证是对输入数据使用强类型检查验证数据的类型、长度、格式、范围等。数据净化数据净化是为了使有潜在危害的数据变得安全。如果所允许的输入范围不能保证输入数据的安全性数据净化就非常有用。数据净化包括从删除用户输入字符串后面的空格到去除值等一切行为。在 Web 应用程序中常见的数据净化示例是使用 URL 编码或HTML 编码来包装数据并将其作为文本而不是可执行脚本来处理。
输入验证
输入验证要根据实际情况来设计下面是一些常见的检测和过滤 1、输入是否仅仅包含合法的字符 2、输入字符串是否超过最大长度限制 3、输入如果为数字数字是否在指定的范围 4、输入是否符合特殊的格式要求如E-mail地址、IP地址等。 而对于重要敏感的信息如折扣、价格等应放到服务器端进行传参与校验等操作。
数据净化
除了在客户端验证数据的合法性输入过滤中还需要净化有害的输入例如以下常见的敏感字符 ’ # javascript 但是仅过滤以上敏感字符是远远不够的。为了能够提供两层防御和确保Web应用程序的安全对Web应用的输出也要进行过滤和编码。
输出编码
当需要将一个字符串输出到Web网页时同时又不确定这个字符串中是否包括XSS特殊字符如 ‘ “等为了确保输出内容的完整性和正确性可以使用编码HTMLEncode进行处理。 HTML编码在防止XSS攻击上起到很大的作用它主要是用对应的HTML标记换为实体这样做可确保浏览器显示实体但不运行他们将其当作HTML文档的内容而非结构加以处理。一些常见的可能造成问题的字符的HTML编码 htmlspecialchars()函数可以将以下五种HTML 特殊字符转成字符实体编码 如果说对输入数据的过滤是针对可疑的信息进行防范那么针对输出数据进行编码就是让可能造成危害的信息变成无害。
过滤方法
输入过滤在数据存储数据库之前便对特殊的字符进行转义方便简洁顺便可以把SQL注入等其他漏洞一并检验。而缺点就是无法处理之前已经存在于数据库中的恶意代码。输出过滤在数据输出之前先对部分敏感字符进行转义这是一个很安全的方法能有效保持数据的完整性。缺点是必须对每一个细节的输出仔细过滤因此会带来额外的工作量。
Web安全编码规范
在输出数据前对潜在威胁的字符进行编码、转义是防御XSS攻击的有效措施。 这些输出一般是动态内容。对Web应用而言其动态内容可能来源于用户输入、URL、HTTP头、POST数据、Cookies的值、查询关键字等所以在应对不同背景下的动态内容的XSS攻击时要部署不同的解决方案。
body文本 假设有如下HTML片段 b错误: 你的查询 ?$quer y?没有返回任何结果 攻击者可能将动态内容$quer y替换成恶意的XSS输入 scriptevil_script() /script 返回的HTML代码为 b错误: 你的查询 scriptevil_script() /script没有返回任何结果 /b
把下列能触发XSS的字符用相应的HTML实体代替和PHP的htmlspecialchars()功能一致 HTML标签中的内容 一些HTML标签如 input、 style、 color等的属性值可能为动态内容该 情况下常存在XSS威胁。 div查询值query/div或inputnamenamevalue?quer y/div或input namename value?query/div或inputnamenamevalue?quer y?“ 攻击者试图输入、等字符产生一个新的 script标记xss” scriptevil_script() /script 然后返回HTML代码如下 input name“name” value“xss” scriptevil_script() /script 假设有以下的HTML代码片段 input name“name” value?$quer y? 恶意输入为 xss οnmοuseοverevil_script() 渲染后的HTML代码如下 input name“name” valuexss οnmοuseοveralert(/xss/) 当受害者移动光标到input输入栏时脚本就会被执行。 script /script中的内容 script var msg‘?$quer y?’; / script 恶意输入为 xss’; evil_script(); // 最终结果为 script var msg ‘xss’;evil_script(); // /script 解决方案 尽量避免或减少在Javascript上下文中使用动态内容稍不谨慎就会导致跨站脚本攻击。另外在 JavaScript中会出现 /script关键字与前面的 script标签闭合还有/* */等 JavaScript注释也会被恶意利用所以对这些字符要进行编码过滤。
JavaScript事件 考虑如下情况 input typebutton namesmt value‘确定’ οnclick‘GotoUrl(“?$targetUrl”);’ 恶意输入为foo);evil_script( 返回的HTML代码为 input typebutton namesmt value‘确定’ οnclick‘GotoUrl(“foo”);evil_script(“”);’
总体来说上述的编码规则实际上表达是同一个概念即将未信任数据嵌入到任何输出之前都应按照上下文的转义规则对其进行编码。