我不熟悉PHP,我们的产品不是用PHP编写的。我们使用一个使用PHP为我们的文档创建的供应商。最近我们在PHP代码中发现了XSX攻击。当攻击者访问
时,会产生XSS攻击。vendor.php/%22onmouseover=%22alert%281310%29%22
常规访问类似于
vendor.php?param1=val1¶m2=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
指令会更有意义,或者-最好的是-简单地从部署中删除违规页面。