Удаление контента из базы данных, меры безопасности - PullRequest
6 голосов
/ 09 мая 2011

UPDATE:

Я добавил защиту CSRF, как сказал мне Бердир, с помощью ссылки ниже, чтобы мое приложение снова заработало. Однако .. Я не совсем уверен, что я сделал прямо сейчас: D Как это сделает мое приложение более безопасным? Меня особенно беспокоит тот факт, что теперь я получаю значение cookie в своем коде ajax, потому что мне нужно передать его с помощью вызова ajax ... в противном случае это просто не работает. Разве это не дает важную информацию о куки? Или я просто параноик. Спасибо!

http://aymsystems.com/ajax-csrf-protection-codeigniter-20

// старый Привет.

В этом веб-приложении, которое я создаю, есть функция, позволяющая добавлять «советы и подсказки» по определенным предметам. Эти страницы могут быть добавлены только учетными записями с ролью администратора. Тем не менее, я также хочу возможность удалить эти страницы. (Всегда удобно, верно). Поскольку я использую CodeIgniter, я думал просто о создании функции контроллера, которая принимает идентификатор и передает этот идентификатор в модель, где страница, соответствующая этому идентификатору, будет удалена из базы данных.

Просто чтобы прояснить это:

Контроллер:

public function del_content($id)
{
    $this->content_model->del_content($id)
}

Модель:

public function del_content($id)
{
    // database code which I can't be bothered to look up now
    // something like $this->db->where(), $this->db->delete()
}

Это все очень просто, но я боюсь, что это может быть слишком просто. Это на самом деле не так уж и безопасно для меня, не так ли? Поскольку вы сможете вызывать функцию из адресной строки URL в вашем браузере, вы можете в основном удалить всю таблицу содержимого через нее. (Поскольку вы будете делать http://mywebsite/controller/del_content/3 для элемента с идентификатором 3). Конечно, только учетные записи администраторов будут иметь доступ к этой функции, но все же ..

Я никогда не программировал ничего подобного раньше, и поэтому мне никогда не приходилось думать о мерах безопасности, которые я должен принять в этом случае. Будет ли кто-нибудь достаточно любезен, чтобы дать мне некоторые вещи, за которыми я должен следить, и, возможно, некоторые идеи, предложения, как сделать это более безопасным?

Большое спасибо!

1 Ответ

5 голосов
/ 09 мая 2011

То, что вам нужно защитить, это CSRF атаки. Проще говоря, это атаки, которые заставляют администраторов посещать определенный URL-адрес с помощью запроса GET или POST.

Типичный способ сделать это - жетоны. При создании ссылки или формы, указывающей на действие удаления, вы генерируете токен, который отправляете клиенту (либо как скрытое поле формы, либо как часть URL-адреса GET), а также сохраняете его на сервере для текущего сеанса и когда это действие выполняется, вы сравниваете переданный и сохраненный токены и продолжаете работу только в том случае, если они совпадают.

Многие фреймворки / системы имеют некоторые встроенные функции, например, все формы, созданные с помощью API форм в Drupal, защищены от таких атак.

...