istais/reflectshield

ReflectShield是一个简单易用的,用于防止反射型XSS攻击的防护工具

dev-master 2017-01-23 14:09 UTC

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 只能处理同一请求上的反射注入。