Насколько безопасно простое использование addlashes() и stripslashes() для кодирования содержимого?
Создание плагина менеджера объявлений для WordPress, чтобы рекламный код мог быть практически любым, от хорошего кода до грязного и даже злого.
Я использую простую дезинфекцию как:
$get_content = '<script>/*code to destroy the site*/</script>';
//insert into db
$sanitized_code = addslashes( $get_content );
При просмотре:
$fetched_data = /*slashed code*/;
//show as it's inserted
echo stripslashes( $fetched_data );
Я избегаю base64_encode()
а также base64_decode()
как я узнал, их производительность немного медленная.
Этого достаточно?
если нет, что еще я должен обеспечить, чтобы защитить сайт и / или БД от злой атаки с использованием плохого рекламного кода?
Я хотел бы получить ваше объяснение, почему вы предлагаете что-то - это поможет решить и меня в будущем. Любая помощь будет принята с благодарностью.
1 ответ
addslashes
затем removeslashes
это путешествие туда и обратно. Вы повторяете исходную строку в точности так, как она была вам представлена, поэтому вы ничем не защищены. '<script>/*code to destroy the site*/</script>'
будет выводиться точно так же, как есть, на вашу веб-страницу, что позволит вашим рекламодателям делать все, что угодно, в контексте безопасности вашей веб-страницы.
Обычно, когда вы добавляете контент на веб-страницу, вы должны использовать htmlspecialchars
так что все выходит в виде простого текста и <
просто означает знак "меньше".
Если вы хотите, чтобы рекламодатель мог включать разметку, но не такие опасные конструкции, как <script>
тогда вам нужно проанализировать HTML, только чтобы теги и атрибуты, которые вы знаете, были безопасными. Это сложно и сложно. Используйте существующую библиотеку, такую как HTMLPurifier, чтобы сделать это.
Если вы хотите, чтобы рекламодатель мог включать разметку в сценарии, поместите их в iframe, обслуживаемый другим доменным именем, чтобы он не мог коснуться того, что находится на вашей собственной странице. Объявления обычно делаются таким образом.
Я не знаю, что ты надеешься делать с addslashes
, Это неправильная форма экранирования для какого-либо конкретного контекста внедрения и даже не удаляет сложные символы. Почти никогда нет причин использовать его.
Если вы используете его для строкового содержимого для создания SQL-запроса, содержащего это содержимое, то STOP, это неправильный способ сделать это, и вы также будете манипулировать строками. Используйте параметризованные запросы для помещения данных в базу данных. (И если вы действительно не можете, правильная строковая литеральная функция будет mysql_real_escape_string
или другие функции с аналогичными именами для разных баз данных.)