Взломать HTML кодирование с помощью AJAX

У меня есть много списков, например, список дел, список покупок и т. Д. На моей веб-странице. Я использую AJAX для добавления или удаления элементов. Например, для списка задач мой HTML выглядит так:

<tr id="todo_userttypea_23"> <td>name</td><td>Delete</td></tr>

Обратите внимание, если пользователи нажимают удалить, я удаляю эту строку.

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

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

Что я должен сделать, чтобы предотвратить это?

5 ответов

Решение

Основной принцип - "никогда не доверяй входящим данным". Любые данные, которые вы отправляете извне, могут быть изменены - параметры, заголовки, ссылки, все. Хорошая и безопасная система не доверяет ни одному из них.

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

Обычно это делается с помощью какой-либо системы входа в систему на основе сеансов, основанной на одном из языков сценариев, таких как PHP, Ruby, ASP или Perl. Существуют готовые решения.

Я думаю, что вы путаете функциональность Javascript с безопасностью. Если вашему пользователю не разрешено удалять AuntMarysShoppingList#32, то сервер не должен позволять ему независимо от того, что клиент запрашивает.

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

Вам необходимо добавить проверку авторизации на стороне сервера. Является ли запрос ajax или иным образом, не имеет значения.

Возможно, вы должны проверить, чтобы при запросе на удаление ajax проверить, разрешено ли пользователю, выполняющему удаление, удалить элемент.

Вам нужно что-то вроде этого на стороне сервера:

if (itemBelongsToUser(itemId, currentUserId)) {
    deleteItem(itemId);
}
Другие вопросы по тегам