如何修复php XSS问题

如何修复php XSS问题,php,xss,Php,Xss,我使用AppScan源代码工具(来自HCL软件)扫描了我的PHP代码,发现几乎有350个不同模式的XSS类型问题 想知道PHP中修复它们的好方法是什么?其中大多数都是由于我们动态响应或添加的html 扫描中包含XSS的示例行如下所示 echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/br

我使用AppScan源代码工具(来自HCL软件)扫描了我的PHP代码,发现几乎有350个不同模式的XSS类型问题

想知道PHP中修复它们的好方法是什么?其中大多数都是由于我们动态响应或添加的html

扫描中包含XSS的示例行如下所示

echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">'
echo''

XSS代表跨站点脚本编写这些都是攻击。一种注入类型,将恶意脚本注入到其他良性和可信的网站中。当攻击者使用web应用程序向其他最终用户发送恶意代码(通常以浏览器端脚本的形式)时,就会发生XSS攻击

我们希望防止这种情况发生。由于您使用的是PHP,因此无法使用。你得用另一种方法。您可以尝试以下选项:

  • 在echo语句中加密您的值
  • 在未检查恶意代码的情况下,应用程序代码决不能将作为输入接收的数据直接输出到浏览器
以下是防止发生XSS攻击的简单步骤:

  • 培训并保持意识
    • 为了确保web应用程序的安全,参与构建web应用程序的每个人都必须了解与XSS漏洞相关的风险。您应该为所有开发人员、QA人员、DevOp和系统管理员提供适当的安全培训。您可以首先将他们引用到此页面
  • 不要相信任何用户输入
    • 将所有用户输入视为不可信。任何作为HTML输出一部分使用的用户输入都会引入XSS风险。以处理公共输入的相同方式处理来自已验证用户和/或内部用户的输入
  • 使用转义/编码
    • 根据用户输入的使用位置,使用适当的转义/编码技术:HTML转义、JavaScript转义、CSS转义、URL转义等。使用现有库进行转义,除非绝对必要,否则不要编写自己的库
  • 清理HTML
    • 如果用户输入需要包含HTML,则无法对其进行转义/编码,因为它会破坏有效标记。在这种情况下,请使用受信任且经过验证的库来解析和清理HTML。根据您的开发语言选择库,例如.NET的HtmlSanitizer或RubyonRails的SanitizeHelper
  • 设置HttpOnly标志
    • 要减轻可能的XSS漏洞的后果,请为Cookie设置HttpOnly标志。如果这样做,则无法通过客户端JavaScript访问此类cookie
  • 使用内容安全策略
    • 要减轻可能的XSS漏洞的后果,还可以使用内容安全策略(CSP)。CSP是一个HTTP响应头,允许您根据请求源声明允许加载的动态资源
  • 定期扫描(用针灸)
    • XSS漏洞可能是由开发人员或通过外部库/模块/软件引入的。您应该定期使用web漏洞扫描器(如Acunetix)扫描您的web应用程序。如果你使用Jenkins,你应该安装Acunetix插件来自动扫描每个构建
    我将在这里包括两个PHP编码的简短示例: 你可以试试我早些时候向你推荐的htmlspecialchars。 我会给出一个例子,你给出的代码行是关于你的问题的

    echo''
    
    将更改为:

    echo htmlspecialchars(“”,ENT_引号,'UTF-8');
    
    您还可以使用html编码器并将其放置在回音中,例如:

    echo“OpenSearchDescription xmlns=”http://a9.com/-/spec/opensearch/1.1/“xmlns:moz=”http://www.mozilla.org/2006/browser/search/""
    
    这些都给出了输出:

    下面是一个关于XSS的简短解释。 在跨站点脚本攻击(XSS)中,攻击者使用易受攻击的网页向用户发送恶意JavaScript。用户浏览器在用户计算机上执行此恶意JavaScript请注意,大约三分之一的网站易受跨站点脚本攻击。

    谷歌代码大学也有关于网络安全的教育视频:


    编辑:这个网站也可以帮助你。这行代码没有XSS问题,除非您不想将数据输出为XML?您的问题不是很清楚。如果我认为你对这件事有所了解,那么这就是你的答案。请尝试更新您的问题,以便更好地了解您正在尝试执行的操作。我的扫描表明lin@Magnuseriksson存在XSS问题扫描仪可能会抱怨
    xmlns
    中的值,因为该值指向外部源。扫描引擎将其标记为漏洞并非闻所未闻。我将删除我的旧版本并更新此更新版本。很抱歉可能会混淆。我尝试了echo htmlspecialchars(“”,entu引号,'UTF-8');再次扫描后发现,我在扫描报告中报告了相同的问题。然后更改为echo“OpenSearchDescription xmlns=”;xmlns:moz=“;”并发现扫描结果为零问题。这意味着,通过使用函数,我可以在动态站点上明确保护,但对于静态站点,我应该转换并使用。很高兴这有帮助,您可以在线使用html编码器,如:对字符串进行编码。在所有更改之后,现在我的网页显示的是所有html字符,而不是实际内容。我不知道还有没有其他方法可以解决这个问题。我在帮你的时候也遇到过同样的问题。您需要做的只是删除前几个和最后几个字符。您只需将
    零件放在末端即可。