Mysql PDO PHP Измененное имя базы данных не вызывает ошибки, но убивает мою страницу

у меня проблема с моей базой данных и проверкой ошибок.

Если хакер решит изменить имя моей базы данных или любой из таблиц, он уничтожит мою страницу.

Я обнаружил это после того, как попробовал свою веб-страницу на другом компьютере, где у меня была папка избранного с именем избранное.

Я перепробовал все: от обработки ошибок try catch до проверки счетчика и последующего перехода на страницу с ошибкой, если возвращается 0 count. Ив пробовал всякое, но безрезультатно.

обычно я отправляю своего пользователя на страницу с ошибкой. Но я не могу перенаправить с указанием местоположения заголовка, потому что проверка находится в середине 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.

Любая помощь очень нужна.

Спасибо.

эй, поскольку вы используете объектно-ориентированный подход к вашему соединению, это вызовет исключение, которое вам придется поймать, если нет, вы можете перейти к процедурному стилю и использовать его возвращаемое значение в качестве указания, следует ли вводить оператор if.

Orlando P. 24.02.2019 01:56

Нет оператора MySQL для переименования базы данных. Вы можете переименовать таблицы, чтобы переместить их каждую в другую базу данных, но вы не можете просто переименовать базу данных как одно изменение.

Bill Karwin 24.02.2019 04:52

Извините, имена таблиц... если я сам изменю избранное на что-то другое, это приведет к сбою страницы, но проблема в том, что я не могу перенаправить, если есть ошибка такого рода, поэтому хакер может сломать мою страницу из-за этого.

MelissaHicking 24.02.2019 12:13

Это не то, как вы используете подготовленные операторы. Ваш код по-прежнему уязвим для SQL-инъекций.

node_modules 24.02.2019 18:59

где стоит $useremail, выглядит необычно.

user10051234 24.02.2019 21:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
5
122
2

Ответы 2

если хакер имеет доступ к изменению имени базы данных, все кончено.

но ты можешь сделать это

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();
}

в улове сделать перенаправление. Но опять же, вы действительно должны быть в положении, когда это может когда-либо произойти.

я попробовал этот улов, но он не выдает ошибки, и моя страница все еще зависает на полпути, но спасибо. Там, вероятно, сумма причин, почему /

MelissaHicking 24.02.2019 12:02

ну, в комментариях вы теперь говорите свою таблицу, а не имя базы данных, поэтому мой ответ к этому не относится, вместо этого вы можете попробовать поймать запрос. @MelissaHicking

user10051234 24.02.2019 21:26

Имейте 2 пользователей базы данных, 1 из которых является «суперпользователем», который используется вами при прямом доступе к базе данных.

Второй пользователь - это «пользователь приложений», которого ваше приложение/страница использует для доступа к своей собственной базе данных, этот пользователь «заблокирован», поэтому у него есть только разрешение делать то, что ему нужно, со своими собственными таблицами. Все, что он не должен делать, он настроен так, что у него нет разрешения на выполнение этого действия/доступа к таблице.

Вы должны ВСЕГДА использовать подготовленные операторы для запросов ВСЕ, чтобы вы случайно не открыли какие-либо дыры в безопасности (атаки SQL Injection), если вы измените источник любых данных на предоставленный пользователем. (НИКОГДА доверяет любым данным, предоставленным любым пользователем, независимо от того, насколько хорошо вы их знаете.

Если база данных недоступна по какой-либо причине, в зависимости от вашего приложения, вы можете рассмотреть возможность выхода из скрипта, выводя пользователю удобное для пользователя сообщение об ошибке (но не сообщая никаких технических подробностей, записывайте подробности ошибки в свои журналы ошибок). )

Меня больше всего беспокоит, почему страница не будет перенаправляться, когда запрос или соединение с БД не удается. Я знаю, что я не должен ничего отображать перед перенаправлением. т. д., но должен быть способ перенаправления.

MelissaHicking 24.02.2019 12:11

Если вы используете инструменты разработчика Chrome для просмотра заголовков, какие заголовки отображаются?

SpacePhoenix 24.02.2019 12:58

Другие вопросы по теме