繁体   English   中英

如何避免“PHP注入”

[英]How to avoid “PHP injection”

我有这个脚本

<?php $number = %value%; ?>

%value%标记将被用户输入的DB上的值替换。

我担心的是有人输入的内容如下:

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);
  ...
?>

你上面描述的机制是有缺陷的。 PHP就是这样不行。 不会执行任何用户输入(或更准确地说,由PHP解释),除非:

  • 您通过eval()调用运行它
  • 您将代码和用户输入的组合保存为PHP文件,然后执行它

你应该担心的是SQL注入,这是一个非常不同的东西。

如果你指的是一个类似于子弹#2的场景,你很可能从设计角度做一些非常错误的事情,你应该重新思考你的方法。

正如code_burgar所提到的......这种设计是完全有缺陷的。 应该没有理由动态构建服务器执行的文件。 您应该从db中提取记录集,循环遍历它并为每条记录执行getFeeds()函数。 这样做不会执行任何db提供的数据,除非..再次作为cod_burgar说..你使用eval()函数。

通常,您希望在任何程序中清理所有用户提供的输入。 EG:如果要求一个5位数字,在将数据分配给变量之前,确认它实际上是一个整数,并确保它只有5位数。

链接到清理PHP输入

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM