繁体   English   中英

SQL查询用户名和密码

[英]SQL query username and password

我正在为一个班级准备一个项目站点,但不明白为什么我会收到此错误。 到目前为止,我已经找到Bareword了,该操作符位于user-login.cgi第14行中,在“来自usr的用户名”附近,也存在相同的错误和相同的行“ $ username AND”,但我找不到任何有用的搜索。 如果有人可以帮助,我们将不胜感激

$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在检查代码时得到的并给出错误

您应该用撇号封装您的sql。 像这样:

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

(实际上,这个crypt $ password看起来不太好...。您应该选择绑定变量,而不是使用来自用户内部的输入来创建大查询字符串。这可能是一个安全漏洞。(搜索sql注射。))

一些问题:

因此,建议这些更改(未经测试):

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;

您需要引用选择

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

您还想添加

use strict;
use warnings;

在脚本的顶部

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM