Я узнал из разных блогов, что настоятельно рекомендуется использовать htmlspecialchars()
для вывода любых данных на экран, чтобы обезопасить себя от XSS Attack
.
Я использую filter_input()
для фильтрации любых данных, поступающих от пользователя, перед вставкой в database
. filter_input()
преобразовать специальные символы, такие как '
, в '
и сохранить их таким образом, например
I'm going to shopping with Molly's sister;Dolly
.Мой вопрос
How can I print(output) apostrope or quotes and specific special characters to users screen using htmlspecialchars so that the output would be user friendly
Я пытался использовать htmlspecialchars($post,ENT_NOQUOTES);
, но он дает мне ту же копию данных, которая хранится в базе данных. Если я не использую htmlspecialchars()
, только $post
дает ожидаемый результат, который, я думаю, уязвим для XSS Attack
Спасибо за ваше время, и с нетерпением ждем помощи от сверстников.
ИЗМЕНИТЬ
У меня есть предложения использовать htmlspecialchars_decode()
или html_entity_decode()
в ответе, но (https://stackoverflow.com/users/1338292/ja%CD%A2ck) и некоторые другие предлагали не использовать эти functions
для вывода данных на экран.
Обратите внимание, что я использую prepared statement
и parameterized query
. Но я не хочу иметь никаких дыр в безопасности, поэтому фильтрую данные перед отправкой в базу данных.
Поскольку я использовал filter_input()
для фильтрации данных перед отправкой в базу данных, безопасно ли выводить данные напрямую ($post=$posted_data;
) из базы данных без использования htmlspecialchars
?
Если мне нужно использовать htmlspecialchars
для вывода данных, то как я могу это сделать в этом случае?
Пример кода
$stmt1=mysqli_stmt_init($connect_dude);
/*Inserting into database*/
if(isset($_POST['titlex']) && isset($_POST['pricex']) && isset($_POST['detailx'])){
$tit=filter_input(INPUT_POST,'titlex',FILTER_SANITIZE_STRING);
$pri=preg_replace('#[^0-9]#','',$_POST['pricex']);
$det=filter_input(INPUT_POST,'detailx',FILTER_SANITIZE_STRING);
$query2="INSERT INTO `hotel1`.`dine` (user_id,title,price,detail) VALUES (?,?,?,?)";
mysqli_stmt_prepare($stmt1,$query2);
mysqli_stmt_bind_param($stmt1, "isis", $logged_id, $tit, $pri, $det);
mysqli_stmt_execute($stmt1);
}
/*Get Data from DB*/
$query1="SELECT id101,title,price,detail FROM `hotel1`.`dine` WHERE user_id=?";
mysqli_stmt_prepare($stmt1,$query1);
mysqli_stmt_bind_param($stmt1, "i", $user_idx);
mysqli_stmt_execute($stmt1);
mysqli_stmt_store_result($stmt1);
mysqli_stmt_bind_result($stmt1, $id101, $title,$price, $detail);
while(mysqli_stmt_fetch($stmt1)){
$id101=$id101;
$title=$title; //htmlspecialchars needed
$price=$price; //htmlspecialchars needed
$detail=$detail; //htmlspecialchars needed
........................
........................
}