安全字符串输出


Safe string output

我得到

$id = (int) $_POST['id']
$content = filter_input(INPUT_POST, 'post_content', FILTER_SANITIZE_STRING);

以上,是使我的$content字符串安全,当我把它发布到数据库:

$conn->new->query("UPDATE `posts` SET `content` = " . $conn->escape_string($content) . " where `id` = {$id};");

但同时,它确实删除了一些特殊字符,如标签,例如我不能在我的帖子中使用<,因为它会被删除。

我该如何修改,以确保足够的安全,同时防止我的代码被黑客攻击?

转义是允许可能对目标系统产生有害影响的某些字符的过程。例如,MySQL使用引号和括号这样的字符。Mysql_real_escape_string转义这些字符,使它们不会污染查询。

在将数据存储到数据库之前,您不一定需要从数据中清除HTML,但必须转义有害字符。正如@Damien在评论中指出的那样,您可以在输出之前转义HTML (可能对HTML有不利影响)。

只要使用real_escape_string()就已经必须是好的和安全的^_^