加密是否可以防止sql注入?

时间:2012-07-26 17:26:51

标签: php sql encryption web code-injection

在将值插入SQL查询之前使用哈希值来防止sql注入,甚至不必使用mysql_real_escape_string? (假设您要为整个网站执行此操作)

编辑:具体来说,目的是从用户获取密钥并在将其与我的表中的其他散列列进行比较之前对其进行哈希处理,然后检索哈希匹配的另一个列值。很抱歉没有指定

6 个答案:

答案 0 :(得分:9)

是的,但它也会使您的数据无用。 :P请记住,散列是单向的,因此您将无法获得有意义的数据。加密是双向的,这可能就是你真正的意思。

我认为使用准备好的SQL语句是一种更广泛接受的解决方案。请参阅this question

答案 1 :(得分:3)

是的,但是一旦散列信息,就无法从散列中重新生成信息。改为使用编码方法。

此外,mysql_ *函数已被(或将很快)弃用。您应该考虑切换到mysqliPDO。如果你是一个懒惰的流浪汉(像我一样),你可以使用与原始mysqli函数几乎相同的mysql_程序样式。

答案 2 :(得分:1)

只要你的哈希输出在mysql中没有任何冲突的字符,那么我绝对会说是的。 base64是做这样的事情的好方法

答案 3 :(得分:1)

是,但仅当您存储加密的密钥和散列密钥时。我刚刚完成了一个执行此操作的tcl脚本。主要程序应该对你有帮助。 使用纯文本密钥和哈希,也加密此纯文本密钥并将它们存储在与保存的表单数据相同的行中(也是加密的)。

通过解密密钥列并插入框中,用普通文本键填充下拉列表或其他内容。现在您可以选择要搜索的纯文本键。

这需要加密,解密和散列路由,每次你想要添加,更新,删除记录或显示记录时都会调用它,但我注意到没有减速但我确信它存在于微秒级别。

确保您的加密来自标准化和受尊重的来源,如openssl或类似,因此您可以使用自动填充和自动IV创建cbc。这种方式就像数据库中的单词加密不同。这也是你需要哈希密钥的原因。否则它将以不同的方式加密,你将无法搜索任何内容。

以这种方式,对一个键进行散列并检查其他散列值。尝试将一组恶意的单词插入到一个字段中,并且可能发生的麦芽汁会变成一个非危险的单词。

如果使用tcl,它也有助于使用花括号,这可以防止问题以

开头

答案 4 :(得分:0)

如果您考虑使用md5()或sha1(),则永远无法解密哈希。如果你有自己的加密算法,我说去吧。

答案 5 :(得分:0)

在我看来,我认为你应该同时使用它们,这是一个例子:

$em = mysql_real_escape_string($_REQUEST['email']);
$pw = mysql_real_escape_string($_REQUEST['password']);
at the insert you use the password($pw) function.