我的数据库和错误检查有问题。
如果黑客决定更改我的数据库或任何表的名称,它将杀死我的页面。
我在另一台计算机上尝试了我的网页后发现了这一点,在该计算机上,我的“收藏夹”文件夹名为“收藏夹”。
我已经尝试了从尝试捕获错误处理到检查计数,然后如果返回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函数一样调用它。
非常需要任何帮助。
谢谢。
答案 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注入攻击)用户提供的任何数据。 (从不信任任何用户提交的任何数据,无论您对它们的了解程度如何。
如果由于某种原因数据库不可用,这取决于您的应用程序,则您可能要考虑退出脚本,向用户回显用户友好的错误消息(但不提供任何技术细节,请将错误的详细信息记录到您的错误日志)