0

为 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()当我了解到他们的表现有点慢时。

够了吗?
如果不是,我还应该确保使用不良广告代码保护网站和/或数据库免受恶意攻击吗?

我很想得到您的解释,为什么您要提出建议-这也将有助于我将来决定正确的事情。任何帮助将不胜感激。

4

1 回答 1

4

addslashes然后removeslashes是往返。您正在完全按照提交给您的方式回显原始字符串,因此您根本不受任何保护。'<script>/*code to destroy the site*/</script>'将完全按原样输出到您的网页,允许您的广告商在您的网页的安全上下文中做任何他们喜欢的事情。

通常,当在网页中包含提交的内容时,您应该使用htmlspecialchars以使所有内容都以纯文本形式出现,并且<仅表示小于号。

如果您希望广告商能够包含标记,但不包含危险的结构,<script>那么您需要解析 HTML,只允许您知道安全的标签和属性。这是复杂和困难的。使用诸如HTMLPurifier之类的现有库来执行此操作。

如果您希望广告商能够在脚本中包含标记,那么您应该将它们放在从不同域名提供的 iframe 中,这样他们就无法触及您自己页面中的内容。广告通常以这种方式完成。

我不知道你希望做什么addslashes。对于任何特定的注入上下文,它都不是正确的转义形式,它甚至不会删除困难的字符。几乎没有任何理由使用它。

如果您在字符串内容上使用它来构建包含该内容的 SQL 查询然后停止,这不是正确的方法,您还将破坏您的字符串。使用参数化查询将数据放入数据库。(如果你真的不能,正确的字符串文字转义函数将是mysql_real_escape_string不同数据库的其他类似名称的函数。)

于 2014-09-21T16:06:55.610 回答