如何在数据库中存储潜在的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语句不会在您的数据库上执行。