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


How do I safely store suspected SQL injection attacks in a database?

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

首先假设我已经检测到一个潜在的攻击,并且在一个变量中有一个攻击字符串,并且想将它添加到一个包含可疑事件日志的表中。

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

我有一种感觉,它将沿着htmlspecialchars和mysql_real_escape_string行…但我想把它放在那里,看看是否有人有任何想法!

一种想法是将攻击存储为编码的base64值,但这似乎有点黑客…

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

任何回复都将非常感谢!

始终使用参数化查询。如果你使用参数,你不需要依赖于转义字符串,你的查询将总是做你想做的事情。

例如:

$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

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

与存储其他数据的方式相同。
存储SQL注入攻击没有什么特别之处,不管你怎么称呼它

就像Steve Mayne说的…请使用php PDO连接准备好的语句。现在是保险箱的问题。不要再使用mysql_connect()和子函数了,因为它是旧的,你不能完全受益于新的mysql/sql/等。功能。

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