2016-08-12 1 views
1

Я создаю приложение и хочу, чтобы пользователи могли удалять некоторые элементы.Secure php -> Ajax delete item на основе id

Я получил этот код для кнопки удаления

<a class='delete_item' id='".$rs['id']."'><i class='icon-cancel'> </i></a> 

Файл JS призывается мыши

... 
$.ajax({ 
    type:'POST', 
    url:'set_order.php', 
    data:'delete_item='+item_id, 
    beforeSend: function() { 
     }, 
    success:function() { 
    window.location.reload(true) 
    } 
}); 
... 

открывает файл set_order.php и этот код обрабатывается

if($_POST['delete_item']) { 
$id = $_POST['delete_item']; 
$sql = "DELETE from list_items where ID = $id"; 
$query = $pdo->prepare($sql); 
$query->execute(); 
} 

Все работает нормально, но оно вообще не защищено :) Если пользователь проверяет страницу и меняет значение «id» как на картинке enter image description here

И нажимает кнопку «удалить», элемент с идентификатором, который пользователь изменил, будет удален вместо исходного идентификатора.

Каков наилучший способ проверки данных?

+0

Пользователям разрешено удалять любой предмет? – iyop45

+0

@ iyop45 Только те элементы, которые они добавили, я выбираю их из базы данных и отображаю кнопку закрытия только для пользователя, который их создал. – Radu033

+1

Установите «Авторизатор» в своем бэкэнд, который проверяет, разрешено ли этому пользователю удалить этот конкретный элемент. – Jeff

ответ

2

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

if(isset($_POST['delete_item'])){ 
    if(userOwnsItem($_SESSION['id'], $_POST['delete_item']){ 
     // Valid request 
    }else{ 
     // Invalid request 
    } 
} 

Где $_SESSION['id'] это идентификатор пользователя и функции userOwnsItem выполняет запрос по этому пункту и проверяет, если владелец имеет тот же идентификатор, что и пользователь.

0

Прежде всего, это не AJAX, потому что вы перезагружаете страницу. Вы должны отредактировать элементы DOM на основе ответов и вызовов, а не вручную перезагружать. Фактически, если вы используете опцию DELETE в php, будет лучше и безопаснее делать это обычным способом, просто перенаправлять на какую-то страницу и при удачном удалении вы перенаправляете куда-либо или обратно на ту же страницу. Если вы хотите, чтобы DO был настоящим ajax-запросом и хотите защитить действие и предотвратить других пользователей для этого, существует множество способов и способов. Вы можете проверить, освобождены ли пользователи для удаления запрошенного идентификатора, вы можете УКАЗАТЬ некоторых пользователей, чтобы они могли выполнить это действие. Самой важной является передача данных. Вы никогда не должны позволять передавать данные, которые не зашифрованы. Таким образом, вы должны в основном это сделать:

  1. Проверьте, если пользователь может получить доступ к функции и страницы
  2. Проверьте, если пользователь владеет то, что он хочет, чтобы удалить
  3. Отправить идентификатор таким образом, не ясно, что это такое - многие функции делают это в руководстве php. Лучший способ - использовать свой собственный 2-сторонний алгоритм - зашифровать/дешифровать, используя специальные слова (соль).
-1

Вставить "echo $ sql;" на php end test ваш SQL правильный

+1

Как это остановить злоумышленника? – Barmar