逃避获取smarty中的参数

时间:2013-07-31 11:17:51

标签: php smarty xss

我继承了PHP,MySQL和Smarty的代码库,我正在为Web应用程序实现一个菜单系统。

我有一个这样的网址:http://example.com/?url=some/page

在我的数据库中,我存储字符串'some/page'并将其映射到文件'some/path/dir/mypage.php',并且在访问URL时,使用include()在PHP脚本中包含文件,该脚本提取{{ 1}}参数。

代码包含使用GET参数发布数据的表单,如果我在url这样的页面上,我需要包含一个名为http://example.com/?url=myform/add的隐藏输入字段,其值为{ {1}}以便表单可以将结果发回到正确的页面。

Smarty具有类似url的语法,可以获取url GET参数并输出它。这导致我的隐藏输入字段如下所示:

myform/add

现在,我意识到我应该在将它打印为值之前清理url参数,但我不确定如何。使用{$smarty.get.url}<input type="hidden" name="url" value="{$smarty.get.url}">字符转义为{$smarty.get.url|escape:'url'},结果为:

/

当我提交表单时,它会转换为%2F给我的网址:

<input type="hidden" name="url" value="myform%2Fadd">

由于%252F应该是一个有效的查询参数,我不知道为什么它首先被编码。在查询中使用http://example.com/?url=some%252Fpage对我来说也很重要,允许用户通过干净的网址以更好的方式理解网址。

所以问题就变成了,我应该如何处理smarty中的get参数以保持/不变,同时防止XSS攻击呢?

因为我在阅读$ _GET ['url']后得到了很好的保护,所以我并不担心PHP方面的问题。

编辑:也许我根本不需要逃避它,因为php脚本获取url参数,如果参数与数据库中存储的不匹配,表单永远不会被加载,因此get参数是永远不会打印在隐藏的输入字段中。我仍然认为这个问题与其他用途有关。

0 个答案:

没有答案