Mysql PDO PHP更改数据库名称不会引发任何错误,但会杀死我的页面

时间:2019-02-24 00:28:48

标签: php mysql pdo

我的数据库和错误检查有问题。

如果黑客决定更改我的数据库或任何表的名称,它将杀死我的页面。

我在另一台计算机上尝试了我的网页后发现了这一点,在该计算机上,我的“收藏夹”文件夹名为“收藏夹”。

我已经尝试了从尝试捕获错误处理到检查计数,然后如果返回0计数则抛出错误页面的所有方法。 iv尝试allsortsto无济于事。

我通常会将我的用户发送到错误页面。但是我无法使用标头位置重新定向,因为检查位于PDO和while循环中间

我告诉你代码。

如何避免这个问题

如果收藏夹数据库名称更改为收藏夹以外的其他名称。它杀死了页面...但是页面的一半被显示。但是,如果我尝试捕获错误,则无法重定向标题位置。.甚至没有注册为错误..

if ($_SESSION['loggedin']==='001'){


if ($db = new PDO("mysql:host=localhost;dbname=favourrites", '????', '')){
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

   //add ;pagination order by limit
   $query11="SELECT * FROM `$useremail` WHERE `faveID` = '$listID' ";

   $stat11=$db->prepare($query11);
    $stat11->execute();

        while($row = $stat11->fetch()){
        $faveID=$row['faveID'];
        }


          if(!isset($faveID)) {$faveID="000";}
          else                                              
          if(empty($faveID)) {$faveID="000";}
          else
          if(!$faveID) {$faveID="000";}


     if ($faveID===$listID){
     echo"
         <img id='favicon[$fid]' data-variable-uid='{$UID}' data-variable- 
          listid='{$listID}' data-variable-accountname='{$accountname}' 
          src='../images/mainpage/fave1.png' title='Allready Added To 
          Favorites' class='iconlarge' style='opacity:0.9' 
          onclick='favecheck($fid);'></img>";            
    }
    else
        {               
         echo" 
         <img id='favicon[$fid]' data-variable-uid='{$UID}' data-variable- 
         listid='{$listID}' data-variable-accountname='{$accountname}' 
         src='../images/mainpage/fave2.png' title='Add To Your Favorites 
         List' class='iconlarge' style='opacity:1' 
         onclick='favecheck($fid);'></img>"; 
        }

}else{

error_reporting(E_ALL); 
ini_set("display_errors", 1);
header("Location: ../imageupload/error");
die();


echo '<script type="text/javascript">';
echo 'window.location.href="../imageupload/error.php";';
echo '</script>';
echo '<noscript>';
echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
echo '</noscript>'; 
exit();

}

}       

上面的代码增加了重定向的尝试,但到目前为止还没有成功。

喜欢检查计数结果等...

如何重定向到我的错误页面。

我尝试了一个函数调用,但是我不熟悉PHP函数,并且试图像jscript函数一样调用它。

非常需要任何帮助。

谢谢。

2 个答案:

答案 0 :(得分:0)

如果黑客有权更改数据库名称,则该名称全部更改。

但是您可以做到

try {
    $db = $db = new PDO("mysql:host=localhost;dbname=favourrites", '????', '')
} catch (PDOException $e) {
    //echo 'Connection failed: ' . $e->getMessage(); // i suggest you do something with the error
    header("Location: ../imageupload/error");
    die();
}

在catch中执行重定向。但同样,您确实应该处于有可能发生这种情况的位置。

答案 1 :(得分:0)

有2个数据库用户,其中1个是“超级用户”,您在直接访问数据库时会使用它。

第二个用户是您的应用程序/页面用来访问其自己的数据库的“应用程序用户”,该用户被“锁定”,因此它仅具有对自己的表执行所需操作的权限。设置它应该做的所有事情,以使其无权执行该操作/访问表。

对于 ALL 查询,您应该始终使用准备好的语句,这样,如果您要更改源,就不会意外打开任何安全漏洞(SQL注入攻击)用户提供的任何数据。 (从不信任任何用户提交的任何数据,无论您对它们的了解程度如何。

如果由于某种原因数据库不可用,这取决于您的应用程序,则您可能要考虑退出脚本,向用户回显用户友好的错误消息(但不提供任何技术细节,请将错误的详细信息记录到您的错误日志)