为WordPress制作广告管理器插件,因此广告代码几乎可以是任何东西,从优秀的代码到肮脏的,甚至是邪恶的。
我使用简单的清理工具,如:
$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()
因为我了解到他们的表现有点慢。
那够了吗? 如果没有,我还应该确保使用不良广告代码保护网站和/或数据库免受恶意攻击?
我很乐意为你解释为什么你有什么建议 - 这也有助于我今后做出正确的决定。任何帮助将不胜感激。
答案 0 :(得分:4)
addslashes
然后removeslashes
是一次往返。您完全按照提交给您的方式回显原始字符串,因此您完全不受任何保护。 '<script>/*code to destroy the site*/</script>'
将完全按原样输出到您的网页,让您的广告客户可以在您的网页安全上下文中做任何他们喜欢的事情。
通常情况下,在网页中包含提交的内容时,您应该使用htmlspecialchars
,以便所有内容都以纯文字形式显示,而<
只是意味着更少的符号。
如果您希望广告客户能够包含标记,而不是<script>
等危险结构,那么您需要解析HTML,只允许您知道的标签和属性是安全的。这很复杂也很困难。使用现有的库(例如HTMLPurifier)来执行此操作。
如果您希望广告客户能够在脚本中添加标记,那么您应该将它们放在由不同域名提供的iframe中,这样他们就无法触及您自己页面中的内容。广告通常以这种方式完成。
我不知道你希望用addslashes
做些什么。对于任何特定的注入环境而言,它不是正确的转义形式,它甚至不能删除困难的字符。几乎没有任何理由使用它。
如果你在字符串内容上使用它来构建包含该内容的SQL查询然后停止,这不是正确的方法,你也将修改你的字符串。使用参数化查询将数据放入数据库。 (如果你真的可以,那么正确的字符串文字转义函数将是mysql_real_escape_string
或其他类似命名的函数用于不同的数据库。)