PHP中的XSS: htmlspecialchars或Apache URL重写规则


XSS in PHP: htmlspecialchars or the Apache URL Rewrite rule?

我不熟悉PHP,我们的产品不是用PHP编写的。我们使用一个使用PHP为我们的文档创建的供应商。最近我们在PHP代码中发现了XSX攻击。当攻击者访问

时,会产生XSS攻击。
vendor.php/%22onmouseover=%22alert%281310%29%22

常规访问类似于

vendor.php?param1=val1&param2=val2

在研究了代码之后,我发现了有问题的行:

$SelfURL = $_SERVER['PHP_SELF'];

我已经修复了这个伟大的链接PHP_SELF和XSS:

$SelfURL = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, "utf-8");

我们已经将修复程序发送给供应商并要求修复PHP。答案让我大吃一惊:供应商声称他们的PHP没有任何问题,我们应该在Apache服务器上启用URL重写规则,不允许访问像vendor.php/这样的页面。

我试图解释,我们没有URL重写规则,只有访问他的页面创建攻击(由于$SelfURL = $_SERVER['PHP_SELF'])由于我不熟悉PHP,我想重新检查:

    使用htmlspecialchars是否足够?我们应该创建URL重写规则吗?

重要的是不允许从某些文件访问。您可以使用.htaccess文件完成此操作并重写规则。但也要始终清理用户输入!永远不要冒险!

使用htmlspecialchars是否足够?

要解决html注入问题,可以。但是,如果您发现他们在一个地方无法以如此简单的方式对内容进行html转义,那么似乎他们没有始终如一地应用转义方法……所以很可能还有更多。

使用自动扫描器和/或肤浅的代码审查将是评估这是否是更大问题的一部分的下一步。

供应商声称他们的PHP没有任何问题

这不是对安全负责的态度的标志。一点也不令人鼓舞。

我们应该在Apache服务器上启用URL重写规则,不允许访问像vendor.php/这样的页面

你不需要访问那个页面吗?

如果他们为您提供了一组不应该访问的管理页面,那么他们需要记录哪些页面涉及到,以便您可以删除对它们的访问。

您通常不会使用重写来阻止对页面的访问。使用Deny指令会更有意义,或者-最好的是-简单地从部署中删除违规页面。