Как сделать «безопасную» форму с вложением, которое отправляется непосредственно на электронную почту? - PullRequest
0 голосов
/ 01 марта 2011

вопрос объясняет все, мне удалось сделать основную информацию формы для части электронной почты, но я запутался, когда речь заходит о безопасности и загрузках. Я не ищу прямой ответ о том, как его запрограммировать, а о ссылках, объясняющих, как это можно сделать, и о том, как избежать плохо запрограммированной формы без защиты, ошибок и некоторых демонстраций (ps: мои навыки php действительно низкие. )

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Несколько очень простых мер безопасности:

) НИКОГДА не доверяйте содержимому переменных, отправленных пользователем.КАЖДЫЙ фрагмент данных должен быть проверен и обработан.

) НИКОГДА не позволяйте пользователю без веских причин выбирать имя, под которым файл будет храниться на сервере.

) НИКОГДА не предполагайте, чтоТип файла - это то, что говорит расширение.

Быстрый поиск в Google открывает страницы с приличной информацией о том, на что следует обратить внимание.Один пример: http://www.acunetix.com/websitesecurity/upload-forms-threat.htm

0 голосов
/ 01 марта 2011

Я предполагаю, что вы сказали в своем вопросе, что вы можете прикрепить файл и отправить его по электронной почте, но вас беспокоит тот, кто прикрепляет файл неправильного типа или размер файла слишком большой.

Я взял следующее из: http://www.webcheatsheet.com/PHP/file_upload.php

<?php
//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error'] == 0)) {
  //Check if the file is JPEG image and it's size is less than 350Kb
  $filename = basename($_FILES['uploaded_file']['name']);
  $ext = substr($filename, strrpos($filename, '.') + 1);
  if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg") && 
    ($_FILES["uploaded_file"]["size"] < 350000)) {
    //Determine the path to which we want to save this file
      $newname = dirname(__FILE__).'/upload/'.$filename;
      //Check if the file with the same name is already exists on the server
      if (!file_exists($newname)) {
        //Attempt to move the uploaded file to it's new place
        if ((move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$newname))) {
           echo "It's done! The file has been saved as: ".$newname;
        } else {
           echo "Error: A problem occurred during file upload!";
        }
      } else {
         echo "Error: File ".$_FILES["uploaded_file"]["name"]." already exists";
      }
  } else {
     echo "Error: Only .jpg images under 350Kb are accepted for upload";
  }
} else {
 echo "Error: No file uploaded";
}
?>

Это проверяет тип файла и размер файла перед загрузкой. Дайте мне знать, если это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...