首先要考虑安全性,对吧?我认为这个问题非常重要,以前有人应该问过,但我在搜索结果中找不到令人满意的答案。
我需要将用户的文章内容存储在数据库中并安全输出。但是有很多方法可以做到这一点。我可以使用filter_var()
,strip_tags()
,mysql_real_escape_string()
,stripslashes()
等来执行此操作。我不能选择一个使用,我无法确认是否足够安全使用其中一个。
清理输入和输出的最佳做法是什么?
答案 0 :(得分:11)
简单:不要过滤输入。逃避输出。
mysql_real_escape_string
。 (更好的是,切换到PDO并使用prepared statements。)htmlspecialchars
。escapeshellcmd
/ escapeshellarg
。urlencode
也请参阅此答案:PHP escaping input variables
答案 1 :(得分:2)
用非常简单的术语“输出上下文的转义/编码”。这就是它的全部内容。
当你想在mysql中存储东西时,你正在制作一个mysql语句。上下文:mysql语句。使用为您执行此操作的预准备语句,或使用PDO适配器实例引用数据,或使用mysql_real_escape_string(作为最后手段),对mysql语句进行编码/转义。
当您想要在HTML页面中输出内容时,Context:html数据。使用htmlspecialchars
对HTML进行编码,但要注意htmlspecialchars
对于html属性来说还不够,因为空格也需要在此上下文中进行编码,两种类型的引号也是如此。
请记住,css和javascript是他们自己的上下文 - 不要将它们视为HTML。