Как правильно обработать POST

Главные вкладки

Аватар пользователя oploshka oploshka 10 апреля 2015 в 13:20

Назрел вопрос безопасности и как использовать переменную $_POST.
Пользователь присылает текст (в котором возможно использовать любые символы) на страницу созданную через hook_menu.

На мой взгляд прямое использование $_POST["data"] не совсем корректно.
Как использовать $_POST["data"] в функции node_save() и db_update().

Проблемы с которыми столкнулся:
1 - form api невозможно использовать, так как post должен приходить с другого сайта и он просто не обрабатывается. (возможно что то делаю не так, но должно приходить только $_POST["data"] и ничего более, а друпалу я так понимаю этого маловато...)
2 - ответ необходимо вернуть в формате json что в form api сделать можно, но не уверен на сколько будет рабочий вариант.
3 - $_POST["data"] участвует в запросах к БД и сохраняется там же, насколько это опасно.

Комментарии

Аватар пользователя oploshka oploshka 10 апреля 2015 в 14:11
<?php 
function hook_menu() {
  
$items['hook/api'] = array(
    
'title' => 'api page',
    
'page callback' => 'hook_api',
    
'access callback' => TRUE,
  ); 
  return 
$items;
}

function 

hook_api() {
db_update('node')
  ->
fields(array('title' => $_POST['data']))
  ->
condition('nid'123)
  ->
execute();

$node = new stdClass();
$node->type 'story';
node_object_prepare($node);
$node->title $_POST['data'];
$node->language LANGUAGE_NONE;
node_save($node);
}
?>

на сколько данный код безопасен и как его обезопасить?

Аватар пользователя Orion76 Orion76 10 апреля 2015 в 19:26

Как минимум html-теги зарежте, типа script, iframe и т.п....
sql-инъекции db_update скорее всего не пропустит, но... если у Вас нет паранойи это же еще ничего не значит..-)
Поэтому режте все, пока паранойя не отпустит..-))

Всех с окончанием рабочей недели-)

Аватар пользователя oploshka oploshka 13 апреля 2015 в 10:23

Увы паранойи особой нету. Это даже скорее всего задатки на будущее. При выводе ноды на экран скорее всего все теги уйдут при применении фильтра. А вот что касается поиска по БД символа больше или меньше и тд (если их прогнать через check_plain)... С точки зрения SQL инъекций PDO не должен всего этого пропустить и это должно меньше всего беспокоить. Больше интересует как друпал сохраняет к примеру ноду введенную пользователем в веб морде и можно ли использовать тот же самый метод.