Санитарная обработка выходных данных - PullRequest
0 голосов
/ 03 октября 2019

Я использую PDO с подготовленными утверждениями в своем коде, и я хотел бы знать, как лучше выводить свои данные, потому что я также использую WYSIWYG-редактор. Использование strip_tags, htmlentities или htmlspecialchars не отображают стили текста должным образом.

Вот код для ввода данных в базу данных:

$sql    = "INSERT INTO posts(post_title, post_content, post_author, post_category, post_tags, post_image)";
                $sql   .= "VALUES(:title, :content, :author, :category, :tags, :image)";
                $stmt   = $dbConn->prepare($sql);
                $result = $stmt->execute([
                    ':title'    => $postTitle,
                    ':content'  => $postContent,
                    ':author'   => $postAuthor,
                    ':category' => $postCategory,
                    ':tags'     => $postTags,
                    ':image'    => $imageFullName
                ]);

1 Ответ

0 голосов
/ 03 октября 2019

Запрошенную вами встроенную функциональность будет сложно получить. У них есть много способов работы

1.) Вы можете использовать внешнюю библиотеку, например htmlpurifier http://htmlpurifier.org/

2.) Использование strip_tags ()

Вы можете использовать strip_tags(), чтобы разрешить прохождение определенных тегов при удалении других опасных HTML-тегов

Например, разрешить только <h1> and <b> при удалении других тегов, которые вы можете сделать

$text_strip = '<h1>Am nancy.</h1><div>hhhh</div> <b>Mooree</b> <a href="">remove me</a>';
// Allow only <h1> and <a>
echo strip_tags($text_strip , '<h1><b>');

см. Список доступных методов фильтрации данных фильтрация данных: https://www.php.net/manual/en/book.filter.php

3.) Использование FILTER_SANITIZE_STRING ()

Вы также можете использоватьFILTER_SANITIZE_STRING() для фильтрации опасных текстовых вводов

echo filter_var ($text_text, FILTER_SANITIZE_STRING); 

см. Список всех доступных методов очистки санитарная обработка: https://www.php.net/manual/en/filter.filters.sanitize.php

Обновления

еще кое-что. Вы все еще можете быть уязвимы для атаки инъекций sql, даже если вы используете pdo. Это потому, что pdo выполняет санитарную обработку путем эмуляции устаревшей функции mysql_real_escape_string (). вам нужно будет заставить pdo отключить эмуляцию и использовать прямые подготовленные операторы. я обновлю свой ответ

Чтобы решить эту проблему, см. код ниже для соединений с базой данных. Для charset установлено значение utf8

$db = new PDO ('mysql:host=localhost;dbname=mydb;charset=utf8', 
    'root', // username
        'root123' // password
);

//Disable Emulates pdo and thus forces PDO to use real prepared statement.
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

. С этим выше вы на 100% защищены от всевозможных SQL-инъекций. напишите мне комментарий, если вы оцените это

...