如何使用addslashes()和stripslashes()来简化代码内容的安全性?
制作一个WordPress的广告管理插件,所以广告代码几乎可以是任何东西,从好的代码到肮脏的,甚至是邪恶的。如何使用addslashes()和stripslashes()来简化代码内容的安全性?
我使用的是喜欢简单的消毒:
$get_content = '<script>/*code to destroy the site*/</script>';
//insert into db
$sanitized_code = addslashes($get_content);
当观看:
$fetched_data = /*slashed code*/;
//show as it's inserted
echo stripslashes($fetched_data);
我回避base64_encode()
和base64_decode()
我了解到他们的表现是有点慢。
那够了吗?
如果不是,我还应该保证使用错误的广告代码来保护网站和/或数据库免受邪恶攻击?
我很想得到你的解释,你为什么要提出建议 - 这将有助于我在将来决定正确的事情。任何帮助将不胜感激。
addslashes
then removeslashes
是一个往返。您完全按照提交给您的原样回复原始字符串,因此您完全不受任何保护。 '<script>/*code to destroy the site*/</script>'
将完全按照原样输出到您的网页,从而让您的广告客户在您的网页安全上下文中执行任何他们喜欢的操作。
通常,当在网页中包含提交的内容时,应该使用htmlspecialchars
,这样所有内容都以纯文本形式出现,而<
仅表示少于该符号。
如果您希望广告客户能够包含标记,但不是像<script>
这样的危险结构,那么您需要解析HTML,只允许您知道的标记和属性是安全的。这是复杂和困难的。使用现有的库,如HTMLPurifier来做到这一点。
如果您希望广告客户能够在脚本中包含标记,那么您应该将它们放入由不同域名提供的iframe中,以便它们不会触及您自己网页中的内容。广告通常以这种方式完成。
我不知道你希望用addslashes
做什么。它不是任何特定注入上下文的正确转义形式,它甚至不会删除难以处理的字符。几乎没有任何理由使用它。
如果您在字符串内容上使用它来构建一个包含该内容然后停止的SQL查询,那么这不是正确的方法,而且您还会损坏字符串。使用参数化查询将数据放入数据库中。 (如果你真的做不到,正确的字符串文字转义函数应该是mysql_real_escape_string
或其他类似命名的函数用于不同的数据库。)
牛眼。我从来没有这样想过:''addslashes'然后'removalashes'是一次往返。*,但它实际上是真实的 - 有害脚本不是数据库存储时的威胁,而是在视觉结束时执行db时的威胁。一个非常好的答案和一个方向也。非常感谢。 – 2014-09-21 16:39:17
BTW'mysql_real_escape_string'已弃用。 :( – 2014-09-21 17:05:28
我不认为'mysql_real_escape_string'已弃用:http://us1.php.net/manual/fa/function.mysql-real-escape-string.php。 – Claude 2014-09-21 21:14:39