2014-03-31 92 views
0

我正在为一类项目的网站,但不明白为什么即时得到这个错误。 到目前为止,我已经 裸词发现,其中运营商预计将在用户login.cgi线14,也同样的错误和同一行“$用户名和”近“距离USR用户名” 我不是能找到任何有用的搜索。如果任何人都可以帮助它是极大的赞赏SQL查询的用户名和密码

$username = $formdata{'username'}; 
$password = $formdata{'password'}; 
$msp = "password"; 
$msdb = "databasename"; 
$msusr = "usrname"; 
$dbh = DBI ->connect("DBI:mysql:$msdb", "$msusr", "$msp"); 
$check_user = $dbh->selectrow_array(select username from usr WHERE email = $username AND usrpswrd = crypt $password, codetype); 

这是尽可能的Perl检查代码时获取并给出了错误

回答

2

您应该封装撇号的SQL。就像这样:

$check_user = $dbh->selectrow_array("select username from usr WHERE email = $username AND usrpswrd = crypt $password",... 

(实际上这个地穴$密码不好看......你应该选择绑定变量,而不是创建一个大的查询字符串从用户进入室内这可以输入。是一个可能的安全漏洞。(搜索SQL注入。))

0

你需要引用选择

"select username from usr WHERE email = '$username' 
    AND usrpswrd = '" . crypt($password) . "'" 

你也想加入

use strict; 
use warnings; 

在脚本

2

的几个问题的顶部:

会建议这些变化(未测试):

use strict; 
use warnings; 

... 

my $msp = "password"; 
my $msdb = "databasename"; 
my $msusr = "usrname"; 
my $dbh = DBI->connect("DBI:mysql:$msdb", "$msusr", "$msp") 
    or die "DB connect failed: $DBI::errstr"; 

my $username = $formdata{'username'}; 
my $password = $formdata{'password'}; 

my $sth = $dbh->prepare(q{select username from usr WHERE email=? AND usrpswrd=?}); 
$sth->execute($username, crypt($password)) or die $dbh->errstr; 
my ($check_user) = $sth->fetchrow_array;