Возможный дубликат:
Каковы наилучшие функции деструкции ввода PHP?
Использует htmlspecialchars () для обработки HTML-данных для ввода-вывода, для плохой конструкции базы данных MySQL?
Если вы вместо этого просто не разрешаете эти «опасные» признаки, потому что в нем будут отображаться b-теги, i-теги и другие? И как это сделать?
Я спрашиваю, потому что он говорит по вики http://en.wikipedia.org/wiki/HTML_sanitization
«Санитарная обработка HTML может использоваться для защиты от межсайтовых сценариев и атак SQL-инъекций путем дезинфекции любого HTML-кода, представленного пользователем».
Поэтому, помимо использования подготовленных инструкций PDO, чтобы предотвратить SQL-инъекции, я хочу использовать этот htmlspecialchars для всех входных и выходных данных. Но, может быть, я должен использовать что-то еще?
Является ли это хорошим способом сделать инструкцию insert?
$type= htmlspecialchars($_POST['animaltype']); $name= htmlspecialchars($_POST['animalname']); $age= htmlspecialchars($_POST['animalage']); $descr= htmlspecialchars($_POST['animaldescription']); $foto= htmlspecialchars($_POST['animalfotourl']); $date=htmlspecialchars($_POST['animalhomelessdate']); $sqlquery = "INSERT INTO animals_tbl(animaltype, animalname, animalage, animaldescription, animalfotourl, animalhomelesssince) VALUES (':type',':name',':age',':descr', ':foto', ':date')"; $stmt = $conn->prepare($sqlquery); $stmt->bindParam(':type',$type, PDO::PARAM_STR); $stmt->bindParam(':name',$name, PDO::PARAM_STR); $stmt->bindParam(':age',$age, PDO::PARAM_INT); $stmt->bindParam(':descr',$descr, PDO::PARAM_STR); $stmt->bindParam(':foto',$foto, PDO::PARAM_STR); $stmt->bindParam(':date',$date, PDO::PARAM_STR); $stmt->execute();
htmlspecialchars()
достаточно для htmlspecialchars()
текста для браузеров. Это защитит других пользователей сайта от атак XSS.
Тем не менее, я буду использовать эту функцию только при отображении данных. Сохранение скрытого содержимого в базе данных кажется мне плохим дизайном. База данных должна хранить фактический контент, а не помеченный контент. Избегайте предметов по мере необходимости на каждом слое и не раньше.
Чтобы проиллюстрировать, почему это плохая идея, рассмотрите веб-сайт, который работает над внедрением JSON-управляемого API. Если они хранят HTML-кодированные данные в своей базе данных, у них есть два варианта: (a) иметь HTML-кодированные данные в своих ответах JSON (что не имеет смысла) или (b) декодировать HTML обратно до его первоначальной формы до JSON -кодирование. Оба варианта субоптимальны.
Данные поступают в базу данных, строки JSON входят в документы JSON, а данные в формате HTML – в HTML-документы. Не смешивайте их!
Если вы используете PDO – с использованием правильных используемых подготовленных инструкций – вам не нужно санировать ваш вход. Но чтобы убедиться, что вы не получите XSS-атак, я бы использовал htmlspecialchars, прежде чем вы положили его в свою БД.