Это может быть отмечено как дубликат, но в моей защите я искал какое-то время, и много информации, которую я нахожу, относится к mysql
или mysqli
в лучшем случае, или является неполным. Я хочу получить подробный, актуальный ответ, который влияет на использование PDO
и подготовленных операторов.Правильный способ обработки потока данных через приложение
Что является надлежащим образом способ обработки данных при его перемещении по приложению.
Является ли следующий теоретический поток данных адекватным, а если нет, то какие улучшения вы бы порекомендовали?
- Собственная форма проверки на стороне клиента.
- Использование
$_POST
, а не$_GET
- В PHP, используя
$variable = htmlentities($_POST['variable']);
непосредственно перед введением базы данных. - с использованием
PDO
и подготовленных заявлений:bindValue(':variable', $variable)
; - На выходе, используя
echo htmlspecialchars($variable);
для предотвращения атак XSS.
Две смежные вопросы:
- позволяет сказать, что вы используете
htmlentities()
данных перед введением базы данных. Как вы можете удалить все мусор, который был вставлен, если введенный пользователь сказал<p>my input value</p>
. Это пишет:<tr><p>my input value</p>&l
в базу данных. - Если ваш php возвращает массив JSON, обработанный AJAX, как вы обрабатываете вывод в этом сценарии? Это не работает в PHP:
htmlspecialchars($JSON_Array)
Заранее благодарю вас за помощь.
Шаг 3 не нужен и вводит в заблуждение. На шаге 5 «htmlspecialchars» применим только к выходу HTML - его можно было бы обобщить на «кодирование вывода способом, подходящим для выходного контекста», «htmlspecialchars» для HTML, «json_encode» для JSON, XML Document methods for XML , и т.д.". – DCoder
Шаг 2, возможно, сомнительный (разница семантическая, а не техническая), но 3 совершенно неправильно. – Jon
@Dcoder 36 - что было бы подходящим способом обработки шага 3, или, я думаю, я должен сказать, что должен делать шаг 3? – hyphen