我需要清理显示给用户的输入吗?

时间:2015-07-10 17:39:50

标签: php

我正在学习如何让我的网站更安全,并且正在使用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('&lt;b&gt;', '&lt;/b&gt;', '&lt;i&gt;', '&lt;/i&gt;', '&lt;u&gt;', '&lt;/u&gt;', '\r\n', '&lt;br /&gt;');
    $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;
}

0 个答案:

没有答案