Есть сайтик, "cms" - самописная. Планирую добавить возможность добавления комментариев. Данные с формы (текст, никаких там фото или файлов) будут заноситься в базу mysql с помощью класса
phpfaq.ru/safemysql в сыром, неформатированном виде. Вопрос в том, как наиболее безопасно эти данные (текст комментариев) потом выводить, чтобы не получить всяких там xss и прочего.
Раньше я делал примерно так:
$input_text = trim($input_text);
$input_text = strip_tags($input_text);
$input_text = htmlspecialchars($input_text);
$input_text = mysql_escape_string($input_text);
ну а потом уже print($input_text).
Возможно, есть либо устоявшаяся практика, как лучше/правильнее, возможно, есть уже готовый класс для этого.
Добавил сильно позднее:
Стал смотреть этот класс SafeMysql внимательнее, я что-то не понял - это ведь не PDO вовсе. Это обертка над mysqli... Меня ранее смутили постоянно в тексте класса упоминающиеся placeholders.
Например:
$name = $db->getOne('SELECT name FROM table WHERE id = ?i',$_GET['id']);
Смотрю в классе:
public function getOne()
{
$query = $this->prepareQuery(func_get_args());
if ($res = $this->rawQuery($query))
{
$row = $this->fetch($res);
if (is_array($row)) {
return reset($row);
}
$this->free($res);
}
return FALSE;
}
Смотрю код private function prepareQuery($args), а в нем просто фильтрация по типам аргументов. Что-то вроде:
...
switch ($part)
{
case '?n':
$part = $this->escapeIdent($value);
break;
case '?s':
$part = $this->escapeString($value);
break;
...
}
...
А реальное обращение к базе:
private function rawQuery($query)
{
...
$res = mysqli_query($this->conn, $query);
...
}
Этот огород можно считать аналогом PDO или же это просто класс, использующий стареющий mysqli_query, просто с тщательной фильтрацией данных?
Добавил:
Класс safemysql - не PDO, не использует подготовленные запросы, а просто фильтрует входные данные. Класс удобный, но все же перехожу на PDO.