安全的PHP登录脚本

时间:2013-11-22 10:04:27

标签: php

我正在使用以下代码行来保护通过PHP脚本登录的注入等。请告诉我是否足够安全免受攻击或我必须添加更多行以使代码更安全。

// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

3 个答案:

答案 0 :(得分:3)

使用任何mysql_*函数并不完全安全。该系列函数现已弃用。

你应该考虑使用MySQLiPDO准备好的陈述来保证绝对安全......

答案 1 :(得分:1)

理论上应该足够安全,但是它仍然存在一些问题。

  1. 不推荐使用mysql_real_escape_string - 您不应该使用它们,而应该使用准备好的声明。

  2. 您没有哈希密码 - 存储纯文本密码不是一个好主意,就像数据库被泄露一样,它们都会立即被人知道。 PHP有一个专用的password_hash函数,您可以使用它。

  3. 你为什么要剥斜杠?如果您希望输入用户名可能包含斜杠,那么您在其他地方缺少验证步骤。一般来说,使用白名单比使用黑名单更好 - 即不是试图剥离坏字符,而是要有一个好的字符列表并且只允许这些字符。这样,您就可以使用简单的内容保护用户名/密码,例如preg_replace('#[^a-bA-B0-9]#', '', $username)

答案 2 :(得分:0)

如果您知道自己在做什么,mysql_ *函数仍然可以使用,尽管它们已被弃用。请确保您不要让注入漏洞。 mysql_ *函数已被删除,因为它太容易让这些漏洞进入。其他函数库如m​​ysqli_ *和PDO_ *允许参数化查询,这使得编写安全代码更容易。

请注意,您绝对不能保证在较新版本的PHP中仍然存在已弃用的函数。

你说的那些线太多了。只需要mysql_real_escape_string()。您可以删除strip_slashes()