Защита запроса $ _GET в PHP - PullRequest
0 голосов
/ 18 мая 2018

Каков наилучший способ защитить запрос GET или есть ли более безопасные альтернативы?


Я использую пару запросов GET на своем веб-сайте для создания веб-страницдинамически и для удаления записей на основе идентификатора.

Последнее беспокоит меня немного, потому что люди могут просто изменить URL-адрес на любой файл, который они хотят удалить.

Чтобы иметь доступ к удалению-файлу нужно войти в систему и иметь определенные разрешения, что приведет к ошибке, если у них недостаточно прав.


Я натолкнулся на действительно старый пост SO ,утверждая, что вы должны использовать функцию mysqli_real_escape_string, чтобы сделать ее по крайней мере более безопасной.

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

Есть еще одно сообщение , в котором говорится, что скрывать запрос в URL в основном бесполезно, поскольку запрос всегда будет частью URL.


Это мой файл удаления, он использует два утверждения, одно удаляет реальное сообщение, а другое удаляет связанные изображения с этим сообщением.

include('./utils/auth.php');

require('./utils/db.php');

$stmt_1 = $connect->prepare('DELETE FROM `dias` WHERE diaserie_id = ?');

if($stmt_1) {
    $id = $_GET['id'];
    $stmt_1->bind_param('i', $id);
    if($stmt_1->execute()) {
        // Als de afbeeldingen uit de database zijn, verwijder dan ook de serie zelf
        $stmt_2 = $connect->prepare('DELETE FROM `diaseries` WHERE diaserie_id = ?');
        if($stmt_2) {
            $stmt_2->bind_param('i', $id);
            if($stmt_2->execute()) {
                echo "Both the files and post have been deleted.";
            } else {
                echo "The files have been deleted, the post iself could not be deleted.";
            }
        }
    } else {
        echo "Files and post could not be deleted.";
    }
}

1 Ответ

0 голосов
/ 18 мая 2018

Хранить изображения и связанные файлы в базе данных (MySQL) и разрешать удаление только из базы данных, связанной с теми же учетными данными для входа.

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

HTML-код:

<input type="file" name="imageUpload" id="imageUpload">

PHP-код:

if(isset($_POST['submit'])) {

    //Process the image that is uploaded by the user

    $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["imageUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

    if (move_uploaded_file($_FILES["imageUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["imageUpload"]["name"]). " has been uploaded.";
    } else {
        echo "Sorry, there was an error uploading your file.";
    }

    $image=basename( $_FILES["imageUpload"]["name"],".jpg"); // used to store the filename in a variable

    //storind the data in your database
    $query= "INSERT INTO items VALUES ('$id','$title','$description','$price','$value','$contact','$image')";
    mysql_query($query);

    require('heading.php');
    echo "Your add has been submited, you will be redirected to your account page in 3 seconds....";
    header( "Refresh:3; url=account.php", true, 303);
}

КОД ДЛЯ ОТОБРАЖЕНИЯ ИЗОБРАЖЕНИЯ:

while($row = mysql_fetch_row($result)) {
    echo "<tr>";
    echo "<td><img src='uploads/$row[6].jpg' height='150px' width='300px'></td>";
    echo "</tr>\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...