Php HTTP\u原始\u POST\u数据的输入验证

Php HTTP\u原始\u POST\u数据的输入验证,php,security,Php,Security,我使用的是xarg.org上的jQuery网络摄像头插件,这个插件可以使用用户网络摄像头,这要感谢flash应用程序和take snap 拍摄快照时,图像被发送到php脚本,以便通过HTTP_RAW_POST_数据保存图像。作者提出这样一个脚本: <?php $str = file_get_contents("php://input"); file_put_contents("/tmp/upload.jpg", pack("H*", $str)); ?> 你认为它安全吗?如果没有,

我使用的是xarg.org上的jQuery网络摄像头插件,这个插件可以使用用户网络摄像头,这要感谢flash应用程序和take snap

拍摄快照时,图像被发送到php脚本,以便通过HTTP_RAW_POST_数据保存图像。作者提出这样一个脚本:

<?php
$str = file_get_contents("php://input");
file_put_contents("/tmp/upload.jpg", pack("H*", $str));
?>
你认为它安全吗?如果没有,我可以做什么样的测试


谢谢

您可以使用
getimagesize()
检查文件类型,这很好,也很安全

但是我在您的代码中看不到对文件大小的任何验证

黄金法则是永远不要相信客户的输入。因此,您应该检查服务器端文件的大小


您可以查看Owasp网站,该网站提供了一些关于文件上传的良好实践:

旁注-我认为
is_array()
不会触发警告,您需要使用
@
使其静音。但是,
mime
是一个未定义的常量,它将抛出一个通知。我建议您检查PHP开发框中的错误报告设置。
$imageOK=true;
$imagesize = getimagesize("views/img/order.jpg");
if(@is_array($imagesize)){
    if($imagesize[mime]!="" && $imagesize[mime]=="image/jpeg"){
        $imageOK=true;
    }
    else {
    $imageOK=false;
    }
} else {
    $imageOK=false;
}
if(!$imageOK)
    unlink("views/img/order.jpg");