2013-06-04 4 views
-2

Я сделал функцию для работы с инъекциями CSS и XSS, но все еще продолжаю работать.Как защитить от внедрения XSS и CSS?

Кто-то сказал следующее для меня, но я не уверен, что это значит:

На вашей функции sanitize_input, сделать strip_tags раздеться все HTML-теги, которые могут быть добавлены через форму. Читайте php.net на strip_tags.

Вот мой код:

private function sanitizeInput() { 
    foreach($_POST as &$post) { 
     $post = $this -> db -> real_escape_string($post); 
    } 
} 
+2

вы ** НЕ ** делаете какие-либо санирующие там вообще. вы просто выполняете экранирование SQL-контекста, которое НЕ делает ничего, чтобы фундаментально «исправить» вредоносные данные. Такое ускорение также совершенно бессмысленно, если вы не собираетесь использовать эти данные в SQL-запросе. –

+1

[Великий эскапизм (или: что вам нужно знать, чтобы работать с текстом внутри текста)] (http://kunststube.net/escapism/) – deceze

+0

Какую функциональность вы используете для доступа к своей базе данных? У вас также должна быть функция strip_tags: '$ post = strip_tags ($ this-> db-> real_escape_string ($ post));' если вы хотите удалить теги. –

ответ

0

код, который вы делает ваш вход безопасным для вставки в базу данных. Однако то, что безопасно для базы данных, может быть небезопасным для HTML.

Как правило, вы используете эту функцию для вставки данных, а когда вы ее извлекаете позже, вы запускаете ее через что-то вроде перед ее выходом. Однако НЕ делайте этого, прежде чем сохранять данные, делайте это только на заключительном этапе вывода.

1

Вы выполняете работу в неправильных местах.

Для предотвращения внедрения SQL, use prepared/parameterized queries with PDO. Это принципиально отделяет данные от команды, делая ее невосприимчивой к общим проблемам SQL-инъекций.

Ваша проблема с XSS не вызывает сомнений в том, что вы используете произвольные данные в контексте HTML без каких-либо экранов. На ваших данных, используйте htmlspecialchars(). Это будет кодировать все специальные символы в их соответствующие сущности.

+0

u означает как $ html value = "'. Htmlentities (htmlspecialchars (stripcslashes ($ _ POST [' userName ']))).'" />? ?? – LearningPhPbasics

+0

Он подразумевает использование PDO - это драйвер для PHP для доступа к mysql. Есть хорошие примеры того, как использовать ссылку, которую он предоставил. – Ace

+0

@LearningPhPbasics, NO! См. Мой ответ здесь: http://stackoverflow.com/a/7810880/362536 Вы не можете просто бросить кучу функций экранирования и ожидать полезного результата. Только убегайте, когда вам это нужно, и в нужном месте. Не кодируйте свой HTML раньше. Никогда не используйте 'stripslashes()'. Не используйте 'htmlentities()' и 'htmlspecialchars()' одновременно! Вы делаете огромный беспорядок из своих данных. – Brad

0

Это зависит от ... вы хотите сохранить метки, но не показывать их в браузере? Если это так, используйте htmlentities. Если нет, используйте strip_tags.

Возможно:

private function sanitizeInput() { 
    foreach($_POST as $key => $val) { 
    $_POST[$key] = $this->db->real_escape_string(htmlentities($val, ENT_QUOTES)); 
    } 
} 

Это действительно зависит от того, что вы пытаетесь достичь.

В приведенном выше примере будет преобразовать: A 'quote' is <b>bold</b> к A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;

Это решение, однако, не является идеальным. Вам не следует преобразовывать данные перед сохранением в базу данных. Вместо этого вы захотите обработать данные после запроса из базы данных.

+0

wow спасибо, я понимаю – LearningPhPbasics

Смежные вопросы