mysql_real_escape_string();
是否存在仅使用utf8 编码无法保护的 SQL 注入方法列表?
对于整数,我使用intval();
的是足够安全吗?
对于那些认为我想获得“教程”来破解任何人的人:不,我不会。我只是想知道如何让我的应用程序更安全,我想知道它们是否 99% 能够免受黑客攻击
mysql_real_escape_string();
是否存在仅使用utf8 编码无法保护的 SQL 注入方法列表?
对于整数,我使用intval();
的是足够安全吗?
对于那些认为我想获得“教程”来破解任何人的人:不,我不会。我只是想知道如何让我的应用程序更安全,我想知道它们是否 99% 能够免受黑客攻击
如果给定一个有效的数据库连接,mysql_real_escape_string()
则应该在所有情况下对字符串数据都是安全的(此答案中描述的罕见例外)。
但是,字符串之外的任何内容都不会转义:
$id = mysql_real_escape_string($_GET["id"]);
mysql_query("SELECT * FROM table WHERE id = $id");
仍然容易受到攻击,因为您不必“突破”字符串来添加邪恶的附加命令。
sql注入方法不多。它们总是由于输入没有被正确清理和转义。因此,虽然mysql_real_escape_string()
可以使任何字符串安全地包含在数据库查询中,但您应该遵循以下避免技术来保护您的数据和用户免受 sql 注入。
is_numeric()
,或使用 静默更改其类型settype()
mysql_real_escape_string()
,将使所有字符串安全地包含在对 mysql 数据库的 SQL 查询中另请参阅:关于 SQL 注入的PHP 页面
有很多东西可能不受标准方法的保护(例如字符串转义、整数转换),这也取决于您使用的软件版本。例如,utf-8 本身就是一个很大的问题,作为一个小例子(在许多例子中),您应该确保请求是有效的 utf-8(或将其转换为 utf-8)。看一个例子。
作为网站的死神,我认为 MySQL 注入保护不能被压缩到一个单一的 SO 答案中,因此我将这些链接作为一般起点。