Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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流安全_Php - Fatal编程技术网

PHP流安全

PHP流安全,php,Php,为什么不允许安全地访问URI为“”的资源? 什么是非基于文件的 我正在阅读以下PHP安全检查列表: thx ^_^你一定是说。老实说,我不认为有任何正当的安全理由不允许这样做 如果脚本中使用用户输入构建包含路径的路径时出错,最好禁用此选项。老实说,这是永远不应该做的,但是设置可以减轻一些损害(不会造成伤害)。这一节讨论了包含文件(即执行的php代码)。如果您使用来自另一个包含的站点的流,则基本上允许代码在您尚未审查的服务器上运行。它可能会随着时间的推移而改变,可能会出现中间人攻击。 基本上,您

为什么不允许安全地访问URI为“”的资源? 什么是非基于文件的

我正在阅读以下PHP安全检查列表:

thx

^_^你一定是说。老实说,我不认为有任何正当的安全理由不允许这样做


如果脚本中使用用户输入构建包含路径的路径时出错,最好禁用此选项。老实说,这是永远不应该做的,但是设置可以减轻一些损害(不会造成伤害)。

这一节讨论了包含文件(即执行的php代码)。如果您使用来自另一个包含的站点的流,则基本上允许代码在您尚未审查的服务器上运行。它可能会随着时间的推移而改变,可能会出现中间人攻击。 基本上,您打开一个后门,允许代码在您无法控制的服务器上运行。根据定义,这是不安全的


即使您没有像用户输入那样直接将其包含在代码中,您也需要封装您使用的任何东西,以防止代码注入sql或php。我见过有人直接将不受控制的输入输入到eval语句中。但是,HTTP协议在默认情况下是不安全的,中间的攻击是可能的,导致“流氓代码”。如果您必须通过HTTP请求/包含(我无法理解为什么必须这样做),请至少使用HTTPS。

可以加载“非基于文件”数据的函数是:

  • 通常用于从本地磁盘加载文件
  • 但也可以通过HTTP、FTP等访问远程数据
此类功能的一个示例是
文件获取内容
,如果已启用


关于“不安全”的内容,请看以下示例:

$file = '...';
$my_data = file_get_contents($file);
这样,您将假设
$my_data
包含从本地文件加载的内容

现在,如果创建的
$file
带有传递给脚本的内容,例如
$\u GET
,您可能会加载一个远程文件,而不是本地文件。。。在这种情况下,您不知道
$my_data
可能包含什么内容

这可能是危险的只是加载一个文件。。。现在,如果您使用的是
require
而不是
file\u get\u contents
。。。这意味着任何人都可以在您的服务器上执行任何PHP代码


让我们高兴的是,有一个指令用于启用远程文件打开(),另一个指令用于启用远程文件包含()


通常,第一个是enable,因为它很有用;第二个是禁用的,因为它会导致安全风险。

允许url\u fopen是危险的,因为它会将看似无辜的函数变成危险的“接收器”。例如,
copy()
函数对于移动文件很有用,但是使用
allow\u url\u fopen=On
可以做一些令人讨厌的事情:

copy($\u GET[file],$\u GET[path])


应在生产系统上禁用allow\u url\u fopen。您应该使用curl访问http/ftp/任何内容。还要确保运行以进一步锁定php安装。PHPSecInfo将对allow\u url\u fopen发出警告

在英语中,他问什么是“注意PHP流,它允许您(和攻击者)使用类似URI的URI访问非基于文件的资源。检查以确保攻击者不能包含包含PHP代码的远程文件。”意思是在列表中。感谢您的回复!有趣的是,设置“开”或“关”允许\ url\ fopen是一种可能的选择,但对于我的应用程序,我认为“开”更好,还因为我不太清楚curl()和fopen()之间的区别,也不知道何时我被迫使用其中一种。所以我想免费使用fopen()并检查数据是否有include()。allow\u url\u fopen非常危险,我个人编写了利用此问题的漏洞。@Rook请提供一些链接。请看我对Pascal答案的评论。是的,能够上传任意php文件比能够四处移动文件要危险得多。这就是信息公开和完整的远程代码执行之间的区别。这是我写的漏洞,很抱歉缓存链接,但milw0rm已关闭()此参数没有意义。因此,获取远程数据比从服务器本身获取任意数据更危险?。。。应正确验证用户数据,
allow\u url\u fopen
不提供任何安全性,并且会继续进行。我不建议将其设置为
false
;;另一方面,您不知道远程服务器上有什么,因此根据您对数据所做的操作,打开远程文件可能更危险;;;当然,正如您所说,用户提交的数据应该经过正确验证。。。但是,不幸的是,它并不总是(嗯,有时很容易忘记……而且不是每个人都考虑安全性:-()如果有什么区别的话,我认为允许读取本地文件比远程文件更危险,因为它会暴露服务器上的私有信息,唯一的例外是Rook在从任意文件复制时指向的情况。好的,这是访问未经验证的用户提供的路径比远程文件更危险的少数情况之一访问未经验证的本地路径,但实际上…allow\u url\u fopen不会防止信息泄露漏洞,这在未经验证的路径中更常见。解决方案是验证路径,而不是关闭该语言的有用功能。@不,应该禁用它,您需要锁定该语言以使每个函数调用要尽可能安全,因为开发人员会编写bug。@事实上,如果您查看我的coppermine漏洞,您会看到开发人员正在清理用户输入,但是我正在放置全局变量名称空间以带来一个tain