[英]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
。 q{}
bind variables
而不是在sql语句中包括变量。 check for errors
不要忘记check for errors
: selectrow_array
请不要忘记将分配的左侧列为列表。 因此,建议这些更改(未经测试):
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.