Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在smarty中转义获取参数_Php_Smarty_Xss - Fatal编程技术网

Php 在smarty中转义获取参数

Php 在smarty中转义获取参数,php,smarty,xss,Php,Smarty,Xss,我继承了PHP、MySQL和Smarty的代码库,并为web应用程序实现了一个菜单系统 我有这样一个URL:http://example.com/?url=some/page 在我的数据库中,我存储字符串'some/page',并将其映射到文件'some/path/dir/mypage.php',当访问URL时,该文件使用获取URL参数的php脚本中的include包含 代码包含使用GET参数发布数据的表单,如果我在http://example.com/?url=myform/add 我需要包含

我继承了PHP、MySQL和Smarty的代码库,并为web应用程序实现了一个菜单系统

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

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

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

Smarty具有类似{$Smarty.get.url}的语法,用于获取url get参数并将其输出。这导致我的隐藏输入字段如下所示:

现在,我意识到我应该在将url参数打印为值之前清除它,但我不确定如何清除。使用{$smarty.get.url | escape:'url'}将/字符转义到%2F,结果是:

当我提交表单时,它将转换为%252F,并提供url:

http://example.com/?url=some%252Fpage

由于/应该是一个有效的查询参数,我不明白为什么首先对它进行编码。在查询中使用/对我来说也很重要,它允许用户通过干净的url更好地理解url

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

我不担心PHP方面的事情,因为我在阅读了$\u GET['url']之后有很好的保护


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

将escape参数留空,如下:{$smarty.get.url | escape}。这将应用htmlspecialchars,而不是RawrUncode转义:'url'。仅当要转义URI组件时,才使用{…| escape:'url'}。还可以为所有变量设置自动转义。只需添加此选项$smarty->escape\u html=true;。如果您设置了这个,并且希望避免对单个变量进行转义,那么您可以像{$noescape nofilter}这样做。哦,太好了。工作得很好。谢谢您: