Помогите с запросом MySQL

0

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

Я не ищу ответа только на некоторые учения о том, как ответить на него

здесь идет:

Предполагая, что "regsister_globals" и "magic_quotes_gpc" включены, что не так с этим фрагментом кода? Документируйте возможные отверстия, затем исправьте их, чтобы создать безопасную версию (есть 4 ошибки)

$p = $_GET["p"];
if ($sp == "index.php") {

     if ($_get["id"] == 345)
          $filter - addslashes($_get["id"]);

     $sql = "SELECT * FROM users WHERE id = {$filter}";
     $row - mydql_fetch_assoc(mysql_query($sql));

     echo <<< HTML
     <html>
           ...... user details .....
     </html>
HTML. 
} else 
      include ($p);
  • 0
    пожалуйста, укажите ошибки ...
  • 0
    Вы уверены, что в этом нет опечаток? Есть более 4 ошибок, которые могут быть просто опечатки ... т.е. '-' вместо '='.
Теги:

6 ответов

1

Это должно помочь вам:

Отверстие 1: register_globals должны быть отключены - это катастрофа безопасности.

$p = $_GET["p"];
// Where does $sp come from?
if ($sp == "index.php") {

     // What the hell? So much wrong with these two lines
     // 1. if id == 345 you don't need to addslashes
     // 2. "-" should be "="
     // 3. addslashes should be mysql_real_escape_string
     // 4. the if() should be removed so it runs every time
     if ($_get["id"] == 345)
          $filter - addslashes($_get["id"]);

     // SQL injection
     $sql = "SELECT * FROM users WHERE id = {$filter}";
     // Again with the "-" instead of "="
     // Typo in the function name
     // No error checking
     $row - mydql_fetch_assoc(mysql_query($sql));

     // No escaping of database input - vulnerable to XSS attacks
     echo <<< HTML
     <html>
           ...... user details .....
     </html>
HTML. // Should be ; not .
} else 
{
      // I can include /etc/passwd by manipulating the URL
      include ($p);
}
  • 0
    Это домашнее задание. так что register_globals "включен" как часть вопроса. Кроме того, я думаю, что вы, возможно, ответили немного быстро, потому что не все ваши комментарии верны.
1

Чтобы запустить запуск Google для "SQL-инъекций" и "Проверка ввода", выполните следующие действия.

Учитывая среду,

"Если предположить," regsister_globals "а также" magic_quotes_gpc "включены"

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

В коде, который был обрезан, есть 4 ошибки, связанные с "Никогда не доверяйте ЛЮБОЙ информации, происходящей извне вашего script", в сочетании с вышеупомянутыми php-директивами.

(Существует намного больше ошибок, чем только 4 ошибки: существует пара "-", которая должна быть "=" и нижний регистр "_get", который должен быть в верхнем регистре и т.д., но я предполагаю, что это просто опечатки.)

0
<?php
    $allow_includes = array(
      'some1', 'some2'
    );
    $p = $_GET["p"];
    if ($p == "index.php") {
         if ($_GET["id"] == 345) {
              $filter = mysql_real_escape_string($_GET["id"]);
         }

         $sql = "SELECT * FROM users WHERE id = '{$filter}'";
         $row = mysql_fetch_assoc(mysql_query($sql));
 ?>
    HTML. 
 <?php
    }
    elseif ( in_array($p, $allow_includes) ) {
      include ($p);
    }
    else {
      echo "Error 404";
    }
 ?>
0

Код уязвим для SQL-инъекций, потому что пользовательские данные не экранируются. Используйте mysql_real_escape_string

0

Попробуйте следующее:

<?php
$p = $_GET["p"];
if ($p == "index.php" && $_get["id"] == 345) {

 $filter = mysql_real_escape_string($_get["id"]);

 $sql = "SELECT * FROM users WHERE id = {$filter}";
 $row = mysql_fetch_assoc(mysql_query($sql));

?>
<html>
 ...... user details .....
</html>
<?php
}
else if (strpos($p, '../')===false && file_exists($p)) {
 include $p;
}

?>
0

mydql_fetch_assoc должен быть mysql_fetch_assoc

  • 0
    Там много проблем с синтаксисом, например, $ filter - addlashes ($ _ get ["id"]);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню