在现实环境中,空字节注入在哪里会影响我的PHP web应用程序?

在现实环境中,空字节注入在哪里会影响我的PHP web应用程序?,php,security,Php,Security,我刚刚阅读了关于PHP的部分 它提供的示例非常愚蠢-我的意思是,为什么您希望在不首先检查的情况下包含基于外部参数的文件(例如,针对目录遍历攻击) 因此,如果遵循标准PHP安全实践,例如 在显示器上对用户输入的数据进行编码 验证用户输入的可用于文件的内容 防止CRSF 不通过执行PHP的东西运行上传 等 有人能提供一个现实生活中的例子或PHP开发人员的一个常见错误吗 谢谢 竖立 我正试图打破一些东西,这就是我所拥有的 哪个输出 string(26) "some_file�_that_is_b

我刚刚阅读了关于PHP的部分

它提供的示例非常愚蠢-我的意思是,为什么您希望在不首先检查的情况下包含基于外部参数的文件(例如,针对目录遍历攻击)

因此,如果遵循标准PHP安全实践,例如

  • 在显示器上对用户输入的数据进行编码
  • 验证用户输入的可用于文件的内容
  • 防止CRSF
  • 不通过执行PHP的东西运行上传
有人能提供一个现实生活中的例子或PHP开发人员的一个常见错误吗

谢谢

竖立 我正试图打破一些东西,这就是我所拥有的

哪个输出

string(26) "some_file�_that_is_bad.jpg"
string(3) "jpg"

我相信空字节注入的部分乐趣在于,简单的验证可能不足以捕获它们

e、 g.就脚本语言而言,字符串“password.txt\0blah.jpg”实际上以“.jpg”结尾。。但当传递给基于C的函数(如许多系统函数)时,它会被截断为“password.txt”

这意味着像这样的简单检查可能不安全。(这只是伪代码,不是PHP)

相反,你可能不得不这样做

 filename = break_at_null(filename);
 if ( filename.endswith(".jpg") ) { some_c_function(filename); }
现在,c函数是什么并不重要。。引用文章中的示例可能需要文件读取功能,但也可能是数据库访问、系统调用等。

哪些功能不安全(即仅包装C函数)?我猜是strlen(),
strcmp()
,等等,但是有明确的清单吗?干杯。据我所知不是这样(但我对这一领域也是新手)。虽然我怀疑这将取决于你的PHP版本,也可能取决于你的操作系统。在我的PHP版本(OSX上的5.2.12)上,我认为可能失败的一些函数是可以的:printf、sprintf、strlen。
 if ( filename.endswith(".jpg") ) { some_c_function(filename); }
 filename = break_at_null(filename);
 if ( filename.endswith(".jpg") ) { some_c_function(filename); }