如何修复跨站点脚本(XSS)?我们可以使用 .htaccess 修复吗
Posted
技术标签:
【中文标题】如何修复跨站点脚本(XSS)?我们可以使用 .htaccess 修复吗【英文标题】:How to fix Cross Site Scripting (XSS)? can we fix using .htaccess 【发布时间】:2018-05-25 09:58:10 【问题描述】:我无法修复我们网站上的跨站脚本 (XSS)。我正在清理输入。部分代码如下
$smecompname = $_POST['companyname'];
$companyname = strip_tags(trim($smecompname));
$companyname = htmlspecialchars($companyname);
$companyname = $this->validateInput($companyname);
protected function validateInput($data)
$data = preg_replace('/[^\pArabic\dA-Za-z0-9 !@#%^&*_.-]/ui', ' ', $data);
$data = htmlspecialchars($data);
$data = html_entity_decode($data);
return $data;
客户端正在使用某种测试工具,并且有评论是跨站点脚本 (XSS) 可能发生在站点上。请建议我还能做些什么来解决这个问题。
我们可以使用 .htaccess 文件解决此问题吗? 谢谢。
【问题讨论】:
如果有人告诉您您的网站对 XSS 攻击持开放态度,您应该询问他们“如何”并提供证据,这样您就可以更好地了解从哪里开始检查和修复您的代码。 如果测试团队将输入设置为 ()&%,则表单公司名称上有一个字段。有 985005 的警报提示,表示它的执行脚本。如果我们从浏览器中的 url 检查它不会发生,因为客户端验证已经到位。但是当他们检查一些工具时,它就会被执行。请指教()&%<acx><ScRiPt>prompt(985005)</ScRiPt>
的输入将使用该代码转换为 &amp %prompt 985005
,这不会创建提示。输出的变量在哪里,它产生什么 html?您可以禁用客户端验证以进行测试,或发出您自己的发布请求,因为您不能依赖它来确保安全。
【参考方案1】:
我们可以利用 filter_input_array(在 php 5 >= 5.2.0, PHP 7 中可用。) 我通常会将此 sn-p 添加到我的 SessionController 中,因为在任何其他控制器与数据交互之前,所有调用都会通过那里。通过这种方式,所有用户输入都会在 1 个中心位置进行清理。 如果这是在项目开始时或在您的数据库中毒之前完成的,那么在输出时应该不会有任何问题...停止垃圾输入,垃圾输出。
/* Prevent XSS input */
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
/* I prefer not to use $_REQUEST...but for those who do: */
$_REQUEST = (array)$_POST + (array)$_GET + (array)$_REQUEST;
http://php.net/manual/en/function.filter-input-array.php
【讨论】:
以上是关于如何修复跨站点脚本(XSS)?我们可以使用 .htaccess 修复吗的主要内容,如果未能解决你的问题,请参考以下文章