如何修复php XSS问题
我使用AppScan源代码工具(来自HCL软件)扫描了我的PHP代码,发现几乎有350个不同模式的XSS类型问题 想知道PHP中修复它们的好方法是什么?其中大多数都是由于我们动态响应或添加的html 扫描中包含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
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语句中加密您的值
- 在未检查恶意代码的情况下,应用程序代码决不能将作为输入接收的数据直接输出到浏览器
- 为了确保web应用程序的安全,参与构建web应用程序的每个人都必须了解与XSS漏洞相关的风险。您应该为所有开发人员、QA人员、DevOp和系统管理员提供适当的安全培训。您可以首先将他们引用到此页面
- 将所有用户输入视为不可信。任何作为HTML输出一部分使用的用户输入都会引入XSS风险。以处理公共输入的相同方式处理来自已验证用户和/或内部用户的输入
- 根据用户输入的使用位置,使用适当的转义/编码技术:HTML转义、JavaScript转义、CSS转义、URL转义等。使用现有库进行转义,除非绝对必要,否则不要编写自己的库
- 如果用户输入需要包含HTML,则无法对其进行转义/编码,因为它会破坏有效标记。在这种情况下,请使用受信任且经过验证的库来解析和清理HTML。根据您的开发语言选择库,例如.NET的HtmlSanitizer或RubyonRails的SanitizeHelper
- 要减轻可能的XSS漏洞的后果,请为Cookie设置HttpOnly标志。如果这样做,则无法通过客户端JavaScript访问此类cookie
- 要减轻可能的XSS漏洞的后果,还可以使用内容安全策略(CSP)。CSP是一个HTTP响应头,允许您根据请求源声明允许加载的动态资源
- XSS漏洞可能是由开发人员或通过外部库/模块/软件引入的。您应该定期使用web漏洞扫描器(如Acunetix)扫描您的web应用程序。如果你使用Jenkins,你应该安装Acunetix插件来自动扫描每个构建
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字符,而不是实际内容。我不知道还有没有其他方法可以解决这个问题。我在帮你的时候也遇到过同样的问题。您需要做的只是删除前几个和最后几个字符。您只需将
和“
零件放在末端即可。