如何安全地将可疑的SQL注入攻击存储在数据库中?

时间:2011-04-10 17:19:39

标签: php sql-injection

我如何在数据库中存储潜在的SQL注入攻击?

首先假设我检测到潜在的攻击,并在变量中包含违规攻击字符串,并希望将其添加到包含可疑事件日志的表中。

我需要做些什么才能将这些字符串安全地插入到数据库中,以便不会产生错误?

我觉得它会像htmlspecialchars和mysql_real_escape_string一样......但是我想把它扔出去看看是否有其他人有任何想法!

一种想法是将攻击存储为编码的base64值,但这看起来有点像hackish ......

仅供参考,我正在用PHP编写应用程序:)

非常感谢任何回复!

5 个答案:

答案 0 :(得分:4)

始终使用参数化查询。如果您正在使用参数,则无需依赖转义字符串,您的查询将始终完全符合您的意图。

e.g:

$statement = $db->prepare('INSERT INTO table_name (field_name1, field_name2) VALUES (:value, :value2)');
$statement->execute(array(':value' => $value, ':value2' => $value2));

请参阅此处的PDO准备文档:

http://www.php.net/manual/en/pdo.prepare.php

答案 1 :(得分:2)

使用mysqli预处理语句来存储查询,这是避免sql注入的最安全的方法。如果您要通过Web界面显示它们并关注XSS / CSRF攻击,请在显示之前使用htmlspecialchars()

答案 2 :(得分:0)

与存储任何其他数据的方式相同。
无论你怎么称呼它都没有什么特别的存储SQL注入攻击。

答案 3 :(得分:0)

像史蒂夫梅恩说的那样......请使用php PDO连接准备好的语句。这是现在的保险箱。不要再使用mysql_connect()和子函数了,因为它已经过时了,你不能完全受益于新的mysql / sql / etc. .. funcitons。

答案 4 :(得分:-1)

我要做的就是通过简单的加密来运行它。 然后当你想显示可疑的sql时,你只需解密它。 这应该确保可疑的sql语句不会在你的数据库上执行。