Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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 安全上传gif图像_Php - Fatal编程技术网

Php 安全上传gif图像

Php 安全上传gif图像,php,Php,我想知道这个的安全性。我只想允许最大大小为64 KB的gif图像。使用accept属性安全吗?i、 eaccept=“image/gif” 非常小的php: if (isset($_REQUEST['upload'])) { move_uploaded_file($_FILES['file']['tmp_name'], '../images/logos/'.str_replace(" ", "_", $name).'.gif'); } 我的表单如下所示: <form action="up

我想知道这个的安全性。我只想允许最大大小为64 KB的gif图像。使用accept属性安全吗?i、 e
accept=“image/gif”

非常小的php:

if (isset($_REQUEST['upload'])) {
move_uploaded_file($_FILES['file']['tmp_name'], '../images/logos/'.str_replace(" ", "_", $name).'.gif');
}
我的表单如下所示:

<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="65536">
<input type="file" name="file" size="40" accept="image/gif">
</form>


现在使用
accept
属性安全吗?

肯定不安全,因为用户可以在客户端更改页面代码,并向服务器提交他们想要的任何内容。这也适用于文件大小。您应该在服务器端验证文件,并检查其MIME内容类型。你最好用函数来做

改进服务器端代码:

if (isset($_REQUEST['upload'])) { 
    list(,, $image_type) = @getimagesize($_FILES['file']['tmp_name']);

    if (filesize($_FILES['file']['tmp_name']) <= 65536
            && $image_type === IMAGETYPE_GIF) {
        move_uploaded_file($_FILES['file']['tmp_name'],
            sprintf('../images/logos/%s.gif', str_replace(' ', '_', $name)));
    }
}
if(isset($_请求['upload']){
列表(,$image\u type)=@getimagesize($\u FILES['file']['tmp\u name']);

如果(filesize($\u FILES['file']['tmp\u name'])肯定不是,因为用户可以更改客户端的页面代码,并向服务器提交他们想要的任何内容。这也适用于文件大小。您应该验证文件服务器端,检查其MIME内容类型。最好使用函数

改进服务器端代码:

if (isset($_REQUEST['upload'])) { 
    list(,, $image_type) = @getimagesize($_FILES['file']['tmp_name']);

    if (filesize($_FILES['file']['tmp_name']) <= 65536
            && $image_type === IMAGETYPE_GIF) {
        move_uploaded_file($_FILES['file']['tmp_name'],
            sprintf('../images/logos/%s.gif', str_replace(' ', '_', $name)));
    }
}
if(isset($_请求['upload']){
列表(,$image\u type)=@getimagesize($\u FILES['file']['tmp\u name']);
如果(文件大小($\u FILES['file']['tmp\u name'])不信任任何内容

如果内容来自网络,那么当你得到它的时候,假设一切都是错的

对于web应用程序,您在HTML中放入的任何内容都不应被视为服务器端的真正安全机制。HTML和JS提供的工具可以非常有助于提供良好的用户体验,并帮助减少发送回服务器的内容中的基本错误数,但坏角色只会绕过您的HTML/JS保护程序更有趣的是,即使在流量低的网站上,如果你不小心会用垃圾填满你的服务器,机器人也会测试表单的基本错误

您需要做好准备,以防止(至少):

  • 错误的文件类型(机器人可能会很快进行测试)
  • 文件太大(机器人可能也会很快进行测试)
  • 文件名中的字符在服务器文件系统上无效(罕见,但会出现)
  • 文件中的恶意内容(如果你想让公众知道这些内容,那么就要对其中的内容非常担心)
    • 不要相信任何东西

      如果内容来自网络,那么当你得到它的时候,假设一切都是错的

      对于web应用程序,您在HTML中放入的任何内容都不应被视为服务器端的真正安全机制。HTML和JS提供的工具可以非常有助于提供良好的用户体验,并帮助减少发送回服务器的内容中的基本错误数,但坏角色只会绕过您的HTML/JS保护程序更有趣的是,即使在流量低的网站上,如果你不小心会用垃圾填满你的服务器,机器人也会测试表单的基本错误

      您需要做好准备,以防止(至少):

      • 错误的文件类型(机器人可能会很快进行测试)
      • 文件太大(机器人可能也会很快进行测试)
      • 文件名中的字符在服务器文件系统上无效(罕见,但会出现)
      • 文件中的恶意内容(如果你想让公众知道这些内容,那么就要对其中的内容非常担心)