2016-05-23 36 views
0

我想熟悉Cross网站脚本,所以我试图利用他们在课堂上提供给我们的一些易受攻击的例子。现在,当表单提交时,我有一个表单,其值存储在PHP的$_REQUEST['in']中,然后在响应返回时在页面的其他位置打印。要打印其内容,使用另一个变量$var$_REQUEST['in']检索它,然后使用echo $var使用echo从PHP变量输出Javascript代码

现在我的选择是将JS代码写入$_REQUEST['in'],这样当它返回时它就会打印在HTML文件中并执行。问题是echo正在将字符<>更改为其等效&lt&gt,这使得JS代码显示为纯文本。没有使用HTML编码方法,这就是为什么我有点困惑。你能给我提示为什么会发生这种情况吗?

这是正在使用$var的文件部分。

<div id="feedback" class="alert alert-warning"> 
    <?php echo $var; ?> 
</div> 

我重新检查了代码寻找一些引用方法,但我没有看到任何。它们包括this JS,但我不认为编码是在那里完成的,因为它不是直接提供给我们的。

+0

它们可能被编码以防止该特定的跨站点脚本攻击。 echo $ var;'在哪里被使用?这可能提供了如何实施攻击的线索。 –

+0

“问题是回声正在将字符'<' and '>'改变为等价的&lt&gt; - 'echo'并不这样做。这将是以前的一个步骤。阻止XSS是做这件事的重要部分。 – Quentin

+0

你有PHP页面的源代码吗?在那里必须有一个'htmlspecialchars()'(或'htmlentities()')调用。除非它们在* request *中被“转换”为“<'/'>'。 –

回答

1

这听起来好像在什么地方最终回声是htmlentitieshtmlspecialchars

在一个侧面说明,回声并不会让你扔它,它只是试图输出任何东西任何东西任何变化,有时失败!