【问题标题】:Sql injection on a php code [duplicate]php代码上的Sql注入[重复]
【发布时间】:2017-05-02 04:47:52
【问题描述】:

大家好,下面给出的 php 代码是我的,我需要知道它是否易受攻击

$sql = "select Email,Password       from user where Email='$emailid'";
$ctr=0;         
    try
    {
       $result = $con->query($sql);
       foreach($result as $row)
       {            
     $ctr++;
     $pword = $row['Password'];

    }
   }
catch(PDOException $e)
  {
      $errTyp = "danger";
    $errMSG = "Something went  wrong, try again later...";
  }

if($ctr == 0)
{
$errTyp = "danger";
$errMSG = "Invalid Username |  Password";
}

else
{
 if( $pword==$password ) {
          $_SESSION['Id']=$emailid; 

这是我的php登录页面代码只是为了确认一下,上面的代码对sql注入有多脆弱?

【问题讨论】:

  • $emailid 来自哪里?
  • 使用 PDO::prepare() 代替 PDO::query() 并在查询中使用占位符。

标签: php mysql


【解决方案1】:

简单,

 $sql = "select Email,Password from user where Email='$emailid'"; 

如果 $emailid 可以,

  $emailid = 'or 1=1';

注射,

 $sql = "select Email,Password from user where Email=''or 1=1"; 

它将返回您数据库的第一条记录。

所以攻击会发生!

【讨论】:

  • 你的意思是$emailid = '\' or 1=1';
  • 是的,如果 $emailid 来自直接用户的 INPUT,它可能会发生!
【解决方案2】:

我发现主要问题可能是 $emailid 的来源

Email='$emailid'"

您不能信任从客户端发送的数据($_POST,$_GET)。这是安全的主要原则。 所以如果你已经清理/过滤了 POST 变量,你应该没问题。 如果不是,您至少应该使用准备好的语句

http://php.net/manual/en/pdo.prepare.php

【讨论】:

    猜你喜欢
    • 2012-11-04
    • 2021-08-16
    • 2015-12-25
    • 1970-01-01
    • 2021-02-09
    • 2020-04-16
    • 1970-01-01
    • 2011-07-12
    • 2016-04-25
    相关资源
    最近更新 更多