我正在学习如何让我的网站更安全,并且正在使用mysqli的转义函数来清理进入SQL查询的输入,并对来自数据库的输入使用htmlspecialchars()(或获取/发布请求回到页面上。
但是,从数据库显示给用户的任何文本看起来都很糟糕,因为某些字符会使用斜杠进行转义,并显示<br />
或\r\n
而不是换行符。当然,我可以删除斜杠,但是当mysqli字符串转义函数放入数据库后,不应该将转义后的字符更改回来吗?
我不应该使用htmlspecialchars来清理显示给用户的输出吗?或者不应该发生这种情况(在这种情况下,必须有一些奇怪的数据进入)?
我仍然想要换行,所以我不得不进行字符串替换。我将下面的函数作为htmlspecialchars()的替代。但我没有看到任何关于必须在网上进行此操作的事情,所以我担心我可能做错了什么。 : - /
function display($data) {
$new = str_replace('\r\n',"<br />",$data);
$new = str_replace('\n',"<br />",$new);
$new = str_replace('\r',"<br />",$new);
$new = stripslashes($new);
$newer = htmlspecialchars($new);
$search = array('<b>', '</b>', '<i>', '</i>', '<u>', '</u>', '\r\n', '<br />');
$replace = array('<b>', '</b>', '<i>', '</i>', '<u>', '</u>', '<br />', '<br />');
$newest = str_replace($search, $replace, $newer);
return $newest;
}
这是我用来清理进入数据库的输入的内容:
function escape($data) {
global $conn;
connect();
$data = stripslashes($data);
$data = $conn->real_escape_string($data);
$conn->close();
$data = str_replace(chr(0), '', $data);
return $data;
}
function sanitize($data) {
$data = trim($data);
$data = strip_tags($data);
$data = escape($data);
$data = htmlspecialchars($data);
return $data;
}