2012-09-11 56 views
-1

我有这个问题与密码加密,现在,我使用MD5 ..我知道这是不是最安全的,但反正。问题与加密密码

我有这样的代码:

$import="INSERT into users(Username,Password,Email,first_name,last_name,phone,user_id) values('$data[0]','md5($data[1]).','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')"; 

现在,在数据库中该帖像它的价值是:我的意思即

MD5(A101)

哪有我解决这个问题?

+0

***你真的不应该使用[MD5密码哈希值(http://security.stackexchange.com/questions/19906/is-md5-considered-insecure)***,你真的应该使用PHP的[内置函数(http://jayblanchard.net/proper_password_hashing_with_PHP.html)来处理密码的安全性。在散列之前,请确保你[不要越过密码](http://stackoverflow.com/q/36628418/1011527)或使用其他任何清理机制。这样做*更改密码并导致不必要的附加编码。 –

+0

[Little Bobby](http://bobby-tables.com/)说*** [你的脚本存在SQL注入攻击风险。](http://stackoverflow.com/questions/60174/how-can- I-防止-SQL注入式-PHP)***。了解[PDO](http://php.net/manual/en/pdo.prepared-statements.php)和[MySQLi] [准备](http://en.wikipedia.org/wiki/Prepared_statement) (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)并考虑使用PDO,[这真的很简单](http://jayblanchard.net/demystifying_php_pdo.html)。 –

回答

2

功能是不是一个变量,SOP不能双引号解析:

$import=" 
    INSERT into users 
    (Username,Password,Email,first_name,last_name,phone,user_id) 
    values('$data[0]','".md5($data[1])."','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')"; 

虽然PHP在双引号内解析变量,但它不会查找每个可能的函数。您将需要打破字符串和使用. concat函数Concat的值。

+0

等等......我开始恨你++ :) –

+0

我该如何解决这个问题?这是因为,我用它来插入一个csv文件.. – blerta

+0

哦,它的工作:)谢谢你... – blerta

2
$import="INSERT into users(Username,Password,Email,first_name,last_name,phone,user_id) 
     values('$data[0]','".md5($data[1])."','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')"; 

这应该工作。

你不能做这样的事情$str = "$str1";与函数调用,所以你必须做这样的事情:$str = "'" . md5($str1) . "'"

+0

THankyou非常多:) – blerta

1

你不能调用函数那样:

$import="INSERT into users(Username,Password,Email,first_name,last_name,phone,user_id) values('$data[0]','".md5($data[1])."','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]')"; 
+1

+1(非常迟到)如果正确答案Mihal :) – Fluffeh

1

在纯PHP,你认为echo "md5($data[1]).";会调用该函数?当然不是,它是字符串的一部分。

您需要连接的MD5电话:

"blah blah blah".md5($data[1])."more blah"; 
0

您的实际问题是,你放在一个函数调用成一个字符串,你可以简单地拼接的md5的返回值到您的字符串是这样的:

'" . md5($data[1]) . "' 

尽管如此,请不要写这样的刀片,这是危险的,如果$data包含用户输入。

你几乎是总是使用预处理语句将数据插入到数据库中更好。我强烈建议你拿起阅读PDO/MySQLi的,或至少是如果你不使用它已经,mysql_real_escape_string

0

对于一个,使用一个字符串数组内将无法正常工作。您需要结束该字符串并对数组元素进行分析以使其具有它们的值。对于诸如md5()函数的函数也是如此。

尝试:

$import="INSERT into users(Username,Password,Email,first_name,last_name,phone,user_id) values('".$data[0]."','".md5($data[1])."','".$data[2]."','".$data[3]."','".$data[4]."','".$data[5]."','".$data[6]."')"; 

我希望这有助于。