代码之家  ›  专栏  ›  技术社区  ›  alex

在现实环境中,空字节注入对我的PHP web应用程序有何影响?

  •  2
  • alex  · 技术社区  · 14 年前

    我刚刚读了关于PHP的一节 http://projects.webappsec.org/Null-Byte-Injection .

    它提供的例子是相当愚蠢的-我的意思是,你为什么要 想要包含一个基于外部参数的文件而不首先检查它(例如目录遍历攻击)?

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

    • 在显示器上对用户输入的数据进行编码
    • 正在验证用户输入的可用于文件的内容

    有人能提供一个现实生活中的例子或PHP开发人员的一个常见错误吗?

    上升

    我在试着打破一些东西,这就是我所拥有的 tried

    // $filename is from public
    $filename = "some_file\0_that_is_bad.jpg";
    
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    
    var_dump($filename, $ext);
    

    哪些输出

    string(26) "some_file�_that_is_bad.jpg"
    string(3) "jpg"
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Michael Anderson    14 年前

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

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

     if ( filename.endswith(".jpg") ) { some_c_function(filename); }
    

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

     filename = break_at_null(filename);
     if ( filename.endswith(".jpg") ) { some_c_function(filename); }
    

    推荐文章