Назрел вопрос безопасности и как использовать переменную $_POST.
Пользователь присылает текст (в котором возможно использовать любые символы) на страницу созданную через hook_menu.
На мой взгляд прямое использование $_POST["data"] не совсем корректно.
Как использовать $_POST["data"] в функции node_save() и db_update().
Проблемы с которыми столкнулся:
1 - form api невозможно использовать, так как post должен приходить с другого сайта и он просто не обрабатывается. (возможно что то делаю не так, но должно приходить только $_POST["data"] и ничего более, а друпалу я так понимаю этого маловато...)
2 - ответ необходимо вернуть в формате json что в form api сделать можно, но не уверен на сколько будет рабочий вариант.
3 - $_POST["data"] участвует в запросах к БД и сохраняется там же, насколько это опасно.
Комментарии
<?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);
}
?>
на сколько данный код безопасен и как его обезопасить?
Как минимум html-теги зарежте, типа script, iframe и т.п....
sql-инъекции db_update скорее всего не пропустит, но... если у Вас нет паранойи это же еще ничего не значит..-)
Поэтому режте все, пока паранойя не отпустит..-))
Всех с окончанием рабочей недели-)
$_POST['data'] у вас string, не массив?
check_plain, например
Увы паранойи особой нету. Это даже скорее всего задатки на будущее. При выводе ноды на экран скорее всего все теги уйдут при применении фильтра. А вот что касается поиска по БД символа больше или меньше и тд (если их прогнать через check_plain)... С точки зрения SQL инъекций PDO не должен всего этого пропустить и это должно меньше всего беспокоить. Больше интересует как друпал сохраняет к примеру ноду введенную пользователем в веб морде и можно ли использовать тот же самый метод.