2013-08-08 1 views
2

Так что я пытаюсь разработать лучший способ для дезинфекции xss для безопасного вывода пользователю.Могу ли я безопасно выводить данные пользователю с помощью этого sanitize

Более или менее при хранении значений из формы im с использованием strip_tags(); затем bind_params();

И когда Im собирается выводить данные пользователю Im также используя htmlentities();

Данные будут отображаться внутри <p> и <a> теги.

например:

<p> Some data from user </p> 

<a href=""> Some data from user </p> 
Должен

эта работа?

Index.php

<form action="sante.php" method="post"> 
Name: <input type="text" name="fname"> 
Age: <input type="text" name="age"> 
<input type="submit"> 
</form> 

А потом sante.php

<?php 

$name = $_POST["fname"]; 
$age = $_POST["age"]; 

$namn = strip_tags($name); // then storing into mysql with bind_param 
$older = strip_tags($age); // then storing into mysql with bind_param 


// before output, htmlentities 

    function safe($value) { 
    htmlentities($value, ENT_QUOTES, 'utf-8'); 

    return $value; 
} 


// Now showing values 

echo safe($namn). "<br>"; 

echo "<p>" .safe($older) . "</p>"; 


?> 

ответ

1

Да, вы можете использовать этот код безопасно. Я вижу, что вы уже используете bind_param (и я предполагаю либо библиотеку mysqli, либо PDO), которая предотвращает SQL-инъекцию (повреждение) и htmlentities, что предотвращает межсайтовый скриптинг (ущерб пользователю).

Вам даже не нужно звонить strip_tags перед записью в базу данных, хотя это хорошая идея, если вы не хотите, чтобы пользовательский ввод содержал любые JS/PHP/HTML-теги вообще (а также если вы забудете вызовите функцию safe на выходе).

+0

Спасибо, да пользователю должно быть разрешено только чистый текст – user2654458

0

При вставке данных в базу данных необходимо использовать mysql_real_escape_string или использовать PDO, если вы вызываете данные, которые вы должны использовать htmlspecialchars

+0

Спасибо, я использую Mysqli bind_param /подготовить – user2654458

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