Привет, ребята, вопрос, у меня есть флажок, где список элементов можно проверять и удалять одним нажатием кнопки. В настоящее время я использую запрос , и он выполняет работу, но мне было интересно, является ли $_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, вполне возможно, что ключи не будут такими, какие вы ожидали бы. Это может привести к серьезным последствиям для безопасности. См:
Не проблема безопасности (злоумышленник может обработать любой запрос GET/POST, который он хочет, и даже отправить его из законного браузера пользователя через CSRF), но проблема обслуживания, поскольку случайно значение cookie может перезаписать параметр запроса, Также вы можете столкнуться с проблемами, если принимаете запросы GET, например. удаление файлов - запросы GET считаются безопасными, а пользовательские агенты могут быть либеральными с их отправкой. Вы должны принимать только POST для запросов, которые изменяют данные или внутреннее состояние и GET для всего остального.
По мере того, как ваше приложение растет с помощью $_REQUEST
вместо соответствующего массива, безусловно, сделает вашу документацию кошмаром. Использование $_REQUEST
для получения значений $_GET
или $_POST
просто не нужно.