我有这个脚本
<?php $number = %value%; ?>
%value%标记将被用户输入的数据库上的值替换。
我担心的是有人输入的内容如下:
1; echo phpinfo()
替换的结果将是:
<?php $number = 1; echo phpinfo(); ?>
这显然是一种安全隐患。
是否有一个函数来逃避php脚本字符或我可以使用的东西?
提前致谢。
这是我正在研究的CMS上的工具,通常工具生成添加到某些PHP文件的HTML代码。
在这种情况下,此工具从RSS频道生成HTML结构。我们要求用户输入RSS URL和要显示的提要数量,我们将这些值替换为PHP脚本,并使用它们获取提要并以HTML结构显示它们。
像这样:<?php
$url = "URL"; //comes from DB
$number = N; //comes from DB
$feeds = getFeeds($url, $number);
...
?>
答案 0 :(得分:10)
您上面描述的机制存在缺陷。 PHP就是这样不行。除非:
,否则不会执行用户输入(或者更准确地说,由PHP解释)eval()
电话你应该担心的是SQL注入,这是一个非常不同的东西。
如果你指的是一个类似子弹的场景,你很可能从设计的角度做一些非常错误的事情,你应该重新考虑你的方法。
答案 1 :(得分:1)
正如code_burgar所提到的......这种设计完全有缺陷。应该没有理由动态构建服务器执行的文件。您应该从db中提取记录集,循环遍历它并为每条记录执行getFeeds()函数。这样做不会执行任何db提供的数据,除非..再次作为cod_burgar说..你使用eval()函数。
答案 2 :(得分:1)
通常,您希望在任何程序中清理所有用户提供的输入。 EG:如果要求一个5位数字,在将数据分配给变量之前,确认它实际上是一个整数,并确保它只有5位数。