我应该mysql_real_escape_string我从用户那里得到的所有cookie,以避免在php中注入mysql?

2 php validation

当用户访问我的站点时,我的脚本会检查2个cookie,这些cookie存储用户ID +密码的一部分,以自动登录.

可以通过cookie编辑器编辑cookie的内容,所以我想可以在写入的cookie中添加一些恶意内容吗?

我应该在我的mysql_real_escape_string所有cookie调用中添加(或其他内容),还是有某种内置程序不允许这种情况发生?

joe*_*rdi 8

真正需要做的是不首先发送这些可被黑客攻击的cookie值.相反,为什么不散列用户名和密码以及(秘密)盐并将其设置为cookie值?即:

define('COOKIE_SALT', 'secretblahblahlkdsfklj');
$cookie_value = sha1($username.$password.COOKIE_SALT);
Run Code Online (Sandbox Code Playgroud)

然后你知道cookie值总是一个40个字符的十六进制字符串,并且可以将用户发回的值与数据库中的任何内容进行比较,以确定它们是否有效:

if ($user_cookie_value == sha1($username_from_db.$password_drom_db.COOKIE_SALT)) {
  # valid
} else {
  #not valid
}
Run Code Online (Sandbox Code Playgroud)

mysql_real_escape_string 对数据库进行额外的打击,BTW(很多人没有意识到它需要数据库连接并查询MySQL).

如果您无法更改应用程序并坚持使用hackable cookie值,那么执行所需操作的最佳方法是使用带有绑定参数的准备语句.