PHP:从$ _POST回显的<script>标记被神秘地阻止</script>

时间:2013-04-04 07:42:26

标签: php javascript security xss

我正在尝试测试我学到的有关PHP安全性的信息。我有一个带有POST表单和单个textarea输入的简单HTML5页面,我在其中输入以下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上都会发生这种情况。我检查了发送和接收的标题,但找不到任何可疑的内容。

有谁知道这个奇怪的伏都教魔法是什么?因为我在这里失去了理智。

2 个答案:

答案 0 :(得分:1)

我运行你的代码并在chrome的控制台上显示

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

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

由于浏览器与浏览器的不同,行为可能会有所不同

答案 1 :(得分:0)

找到解决方案。 这是WebKit本身的安全功能 - 这就是Chrome和Safari都拥有它的原因。为了防止某些形式的XSS攻击,它阻止页面执行在请求标头中发送的JS代码。 绕过这种情况的方法是发送响应头

x-xss-protection: 0

现在我所有的假冒恶意代码都是恶意的。