istais / reflectshield
ReflectShield是一个简单易用的,用于防止反射型XSS攻击的防护工具
Requires
- antecedent/patchwork: ^2.0
- phpmyadmin/sql-parser: ^4.1
Requires (Dev)
- phpunit/phpunit: 4.0.*
This package is not auto-updated.
Last update: 2024-09-14 19:58:28 UTC
README
#ReflectShield
ReflectShield将Chrome XSS防护的一部分迁移到服务器端。ReflectShield会检查即将在网页上运行的脚本是否也存在于获取该网页的请求中。如果脚本存在于请求中,这是一个强烈的迹象,表明服务器可能已被欺骗以反射脚本。因此,它通过将此请求参数中所有具有HTML字符实体等价的字符转换为这些实体,来阻止反射型XSS攻击。
此外,ReflectShield引入了类似的技巧,以减轻SQL注入漏洞。ReflectShield挂钩常见的易受攻击的MySQL API调用,并检查获取该网页的请求参数是否也存在于执行的SQL查询中。如果请求参数出现在查询中,并且这些不是原子SQL令牌的部分,那么这是一个强烈的迹象,表明服务器可能已被欺骗以执行恶意SQL语句。
##Chrome XSS防护
XSS审计器是Chrome和Safari内置的功能,旨在减轻跨站脚本(XSS)攻击。它的目标是确定查询参数是否包含恶意JavaScript,如果它认为有效载荷被注入到服务器响应中,则会阻止响应。XSS审计器采用黑名单方法来识别请求参数中提供的危险字符和标签。它还尝试将查询参数与内容匹配以识别注入点。
##ReflectShield可以防护
-
反射型跨站脚本攻击:非持久型XSS问题,当Web应用程序盲目地在相应的HTTP响应HTML中回显HTTP请求的部分时发生。为了成功利用反射型XSS漏洞,攻击者必须欺骗受害者发送一个伪造的HTTP请求。这可以通过发送恶意链接或在一个攻击者控制的页面中包含隐藏的Ifame来实现。
-
SQL注入攻击:注入问题,其中SQL命令被注入到数据平面输入中,以执行预定义的SQL命令。目前,ReflectShield能够检测"mysql_query"和"mysqli_query"函数中的注入。
##安装
-
ReflectShield使用PHP Patchwork来执行动态方法重定义。因此,为了成功打补丁,推荐的方式是将ReflectShield首先导入到独立的初始化文件中,因为重定义不会在比它早编译的任何脚本上工作,并且在此步骤中使用的任何MySQL函数都将保持未受保护。建议创建以下索引文件,并包含您的"application.php",该文件必须验证变量"protect"已被设置。
use ReflectShield\ReflectShield; $shield = new ReflectShield; define("protect",true); include __DIR__ . application.php
##绕过预处理器直接集成
-
您可以直接在PHP脚本中使用ReflectShield,通过在脚本开始处请求一个新的对象。包含文件agail,允许预处理器正确实现方法重定义。
use ReflectShield\ReflectShield; if(!isset($AVOIDPREPROCESS)){ $AVOIDPREPROCESS = true; $shield = new ReflectShield; include __FILE__; return; }
-
预处理对于修补MySQL API调用以减轻SQL注入漏洞是必要的。如果您网站不需要SQL注入防护,您可以使用以下简单的对象请求
use ReflectShield\ReflectShield; $shield = new ReflectShield;
-
.htaccess文件也是安装选项之一。将以下内容粘贴到您的.htaccess文件中,它将在包含该文件的目录中的所有页面上启用ReflectShield。
php_value auto_prepend_file /var/www/html/reflectshield/examples/usinghtaccess/initReflectShield.php
如果禁用了 .htaccess 文件,请检查以下网站 https://help.ubuntu.com/community/EnablingUseOfApacheHtaccessFiles
##ReflectShield 的局限性
-
输入变异:ReflectShield 尝试将查询参数与内容匹配以识别注入点。如果查询参数无法与响应中的内容匹配,ReflectShield 不会被触发。因此,如果 Web 应用对输入参数进行任何类型的修改,将使 ReflectShield 在防止攻击方面变得无用。
-
反射 JavaScript 注入:如果查询参数与响应中的内容匹配,ReflectShield 将将此内容中所有具有 HTML 字符实体等效字符的所有字符转换为这些实体。然而,即使没有具有实体等效字符,也可能发生反射 JavaScript 注入。
-
基于 DOM 的 XSS:由处理关联 DOM 的数据不安全的客户端代码引起的安全漏洞。DOM 由表示浏览器视角中文档属性的对象组成。当在安全关键上下文中使用不受信任的 DOM 数据时,这些问题就会显现出来,例如调用 eval。ReflectShield 无法保护基于 DOM 的 XSS,因为漏洞位于网站的脚本代码中,且注入有效载荷并未直接反映在响应中或始终传输到服务器。
-
持久/存储 XSS:所有 XSS 漏洞,其中攻击者能够永久地将恶意脚本注入易受攻击应用的存储中。这样,每个访问受污染网页的用户都会接收到注入的脚本,而无需攻击者采取进一步行动。ReflectShield 只能处理反射注入。
-
多步骤 XSS:这些漏洞需要用户在应用上执行多个操作以执行攻击向量/注入的恶意 JavaScript 代码。多步骤 XSS 漏洞的主要特点是攻击向量注入在一个页面中,然后稍后在其他页面或应用中回显。ReflectShield 只能处理同一请求上的反射注入。