PHP: & lt; script>从$_POST返回的标记被神秘地阻塞了

PHP: <script> tag echoed from $_POST is mysteriously blocked

本文关键字:POST script lt PHP 返回      更新时间:2023-09-26

我正在测试我学到的关于PHP安全性的信息。我有一个简单的HTML5页面,带有POST表单和单个文本区域输入,我在其中输入以下JS代码:

<script>var x = 5; alert(x);</script>

在接收PHP页面中,我简单地echo $_POST['varname'];来查看JS代码的执行情况。这当然是清理输入的第一步。

…但是行不通!返回的HTML代码是

<doctype html>
<html>
<body>
<script>var P = 3; alert(P);</script></body>
</html>

…但是警报没有运行!更奇怪的是,当我将代码原样复制到PHP文件中,并让它在不使用PHP的情况下返回该代码时,它不会再次运行,但是如果我更改变量的名称或其值-它会运行!

这在Chrome和Safari上都会发生。我检查了发送和接收的标头,没有发现任何可疑之处。

有人知道这奇怪的巫毒魔法是什么吗?我都快疯了

我运行你的代码,在chrome的控制台上它说

"拒绝执行JavaScript脚本。在请求中找到的脚本源代码。"

所以这可能是一种自然的安全措施,代码没有问题。

行为可能因浏览器而异,因为它们的方法不同

找到解决方案。这是WebKit本身的一个安全特性——这就是为什么Chrome和Safari都有它的原因。为了防止某些形式的XSS攻击,它会阻止页面执行在请求头中发送的JS代码。绕过这个的方法是发送响应头

x-xss-protection: 0

现在我所有的假恶意代码都能很好地工作。