我查阅了很多关于保存安全数据库的教程,但我仍然不知道需要采取哪些措施来保护我的数据库免受SQL注入和黑客攻击。
这是我用来清除任何用户输入的功能,但我觉得这不是全部,我还能忽略其他什么?
function CleanInput($value) {
stripslashes($value);
if(!is_numeric($value)) {
mysql_real_escape_string($value);
}
return $value;
}
答案 0 :(得分:0)
答案 1 :(得分:0)
最佳做法是使用prepared statements
使用mysql_query
也是一种不好的做法,因为它已被弃用,如果你检查文档就可以看到。
使用mysql_real_escape_string
也是一种不好的做法,因为它也被弃用了,它无法让您免于logical sql injections
预备语句将避免黑客在系统中插入可能导致注入的命令,但它会为常量创建一个模板,这不会影响数据库。它对性能也有好处。
验证所有输入(客户端和服务器端)也是明智的。
答案 2 :(得分:0)
首先,安全的mySQL没有灵丹妙药。 你必须详细说明一点。 如果您对登录感兴趣以及如何避免大多数(如果不是全部)SQL注入技巧等等,那么 在mySQL中使用存储过程。我不认为PHP会给你所有的一切。 例如,考虑一下,不是连接到您的真实/生产数据库,而是连接到另一个数据库,您的用户只能以只读方式访问存储过程(PHP的功能更好)。 然后,没人能在这个DB中看到你的数据!即使他知道你的db-name,username和passwd,他也无法从任何表中选择。 使用您的存储过程,您提交(再次选择)用户的用户名和密码,然后您将收到一个新的数据库名称,主机,用户名和密码,再次连接以检索您的真实数据。
如果你不太注意性能或mySQL重载,你可以对DB的任何连接使用相同的技巧。
答案 3 :(得分:-1)
这不是一个糟糕的开始,但这里有一些非常有用的信息链接:
http://simon.net.nz/articles/protecting-mysql-sql-injection-attacks-using-php/
最好的解决方案?使用绑定参数。要使用这些,您需要使用PHP5附带的改进的mysqli库。这种技术稍有不同,您首先使用占位符定义查询“模板”,然后将参数“绑定”到它,并且mysqli库负责为我们提供适当的转义:
$query = $mysqli->prepare( "UPDATE tablename SET favorite_color = ?, age = ?, description = ? WHERE user = ?" );
// we would have a bind looking like this:
$query->bind_param( 'sibs', 'red', 27, $some_blob, $variable );
$query->execute();
答案 4 :(得分:-1)
将MD5功能用于您工作的后端(数据库,MySQL等)和前端(php等)的密码。
非常简单但是开始确保工作的良好开端。
我的教授称赞我把它包括在我的项目中。