Привет, ребята, вопрос, у меня есть флажок, где список элементов можно проверять и удалять одним нажатием кнопки. Я в настоящее время пользуюсь запросом, и он выполняет эту работу, но мне было интересно, был ли $ _REQUEST каким-то угрозой безопасности или неправильным. Если у кого-нибудь есть совет, я был бы признателен. Должен ли я перейти на $ _POST? Если да, то каков наилучший способ сделать это?
foreach ($_REQUEST as $key=>$value) { if (substr($key,0,3)==="img") { $id = substr($key,3); if(isset($_REQUEST['Delete'])) { $sql = 'SELECT file_name,username FROM images WHERE id=?'; $stmt = $conn->prepare($sql); $result=$stmt->execute(array($id)); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $image=$row['file_name']; $user=$row['username']; $myFile = "$user/images/$image"; unlink($myFile); } <input id=\"img".$id."\" name=\"img".$id."\" type=\"checkbox\">
Да. Вы должны изменить его на $ _POST. Всегда используйте соответствующие суперглобалы над $ _REQUEST.
Из-за порядка, в котором данные собраны в $ _REQUEST, вполне возможно, что ключи не будут такими, какие вы ожидали бы. Это может привести к серьезным последствиям для безопасности. Видеть:
Поскольку ваше приложение растет с использованием $_REQUEST
вместо соответствующего массива, наверняка сделает вашу документацию кошмаром. Использование $_REQUEST
для получения значений $_GET
или $_POST
просто не нужно.
На самом деле проблема с безопасностью (злоумышленник может обработать любой запрос GET / POST, который он хочет, и даже отправить его из браузера законного пользователя через CSRF), но проблема обслуживания, поскольку случайно значение cookie может перезаписать параметр запроса. Кроме того, вы можете столкнуться с проблемами, если принимаете запросы GET, например, удаляя вещи. Предполагается, что запросы GET безопасны, а пользовательские агенты могут быть либеральными с их отправкой. Вы должны принимать только POST для запросов, которые изменяют данные или внутреннее состояние и GET для всего остального.