我有这个脚本
<?php $number = %value%; ?>
%value% 标记将替换为用户在数据库中输入的值。
我担心的是有人输入了如下内容:
1; echo phpinfo()
替换的结果将是:
<?php $number = 1; echo phpinfo(); ?>
这显然是一个安全风险。
是否有转义 php 脚本字符的功能或我可以使用的功能?
提前致谢。
上下文
这是我正在使用的 CMS 上的一个工具,通常工具会生成添加到某些 PHP 文件的 HTML 代码。
在这种情况下,此工具会从 RSS channel 生成 HTML 结构。我们要求用户输入 RSS URL 和要显示的提要数量,我们将这些值替换到 PHP 脚本中并使用它们来获取提要并以 HTML 结构显示它们。
像这样:
<?php
$url = "URL"; //comes from DB
$number = N; //comes from DB
$feeds = getFeeds($url, $number);
...
?>
最佳答案
您上面描述的机制存在缺陷。 PHP 不能那样工作。除非:
- 您通过
eval()
调用运行它 - 将代码和用户输入的组合保存为 PHP 文件,稍后执行
您应该担心的是 SQL 注入(inject),这是完全不同的事情。
如果您指的是与项目符号 #2 类似的场景,那么从设计角度来看,您很有可能做错了一些事情,您应该重新考虑您的方法。
关于php - 如何避免 "PHP injection",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4401311/