php - 考虑到 SQL 注入(inject),这种 PHP 登录技术安全吗?

标签 php mysql sql-injection

我正在调查某个 PHP 开发人员很久以前编写的网站,我想知道他使用的登录技术是否安全。

这是他的做法:

$username='';
$username = escapeshellcmd($HTTP_POST_VARS['user']);
$pwd = escapeshellcmd($HTTP_POST_VARS['pw']);

$loginerror=false;

if ($logout=="1")
{
  closesession($s_id);
  $username='';
  $logged=false;
}

$logged=checksession(session_id(), $ipaddr);

if ((!$logged) && ($username!=''))
{
        //$username = escapeshellcmd($HTTP_POST_VARS['felhasznalo']);
        //$pwd = escapeshellcmd($HTTP_POST_VARS['jelszo']);
        if (checkuser($username, $pwd, DOM))
            {
            if (sessionstore(session_id(), $username, $pwd, $ipaddr, $datum, DOM))
                {
                $logged=true;
                }
            }
        else
            {
            $loginerror=true;
            ;
            }       
}
if ($logged)
    {
    $username=getsessionuser(session_id());
    $remember=getremember($username, DOM);
    }
?>

function checkuser($u, $p, $d )
{
$sql_ell='SELECT PWD FROM USERS WHERE ACTIVE=1 AND USERNAME="'.$u.'" AND DOMAIN="'.$d.'"';
$eredm_ell= mysql_query($sql_ell);
if ($eredm_ell)
    {
    $domainnumrows=mysql_num_rows($eredm_ell);
    if ($domainnumrows==1) 
        {
        $egy_sor = mysql_fetch_row( $eredm_ell ); 
        $pwd_in_table=$egy_sor[0];
        if ($pwd_in_table==md5($u.$p))
            {
            return true;
            }
        } // rows
    } // ered
return false;   
} // func

这样安全吗?

最佳答案

如果我没看错的话,对用户名进行的唯一检查是 escapeshellcmd。这还不够。同样,如果我没看错的话,它会被放入这个查询中:

$sql_ell='SELECT PWD FROM USERS WHERE ACTIVE=1 AND USERNAME="'.$u.'" AND DOMAIN="'.$d.'"'

在那里你可以做各种肮脏的事情。

所以没有。这不安全。

关于php - 考虑到 SQL 注入(inject),这种 PHP 登录技术安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7113582/

相关文章:

php - 使用求和函数时,我的查询返回单条记录

mysql - 创建 'users' 和 'friends' 关系

java - 如何以编程方式创建数据库且注入(inject)安全?

php - 我是否需要一个框架来在 PHP 中构建 REST API?

php - Merchant SDK for Express Checkout API 在 Paypal 上的 Composer 问题

php - MySQL SELECT 在 PDO 中带有子查询以获取每月统计信息

mysql - PostgreSQL 与 MySQL 等相比的安全性

php - 如果我确定我在动态语句中使用的某个值是整数,我是否可以避免 SQL 注入(inject)?

php - WHERE查询上的PHP错误代码

mysql - 在 Mysql(或任何)数据库中存储请求的正确方法