2015-08-14 6 views
0

Для создания веб-приложения Я создаю функцию удаления пользователя, которая перестала работать. Я не изменил ничего, связанного с этой функцией. Поэтому я очень озадачен. У меня есть консоль PHP, установленная в хром (и приложение). Но это не дает никаких ошибок или предупреждений.

Я использую bootbox, чтобы проверить, если пользователь действительно должен быть удален:

function delete_id(id, fullname) { 
    bootbox.confirm({ 
     size: 'small', 
     message: '<i class="glyphicon glyphicon-question-sign orange"></i>Are you sure you want to delete user "'+fullname+'"?', 
     callback: function(result) { 
      if(result) { 
       window.location.href = '?delete_id='+id; 
      } 
     } 
    }); 
} 

Затем он должен быть передан через мой PHP функции:

function delete_user ($mysqli) { 
    if(isset($_GET['delete_id'])) { 
     $sql_name = "SELECT * FROM users WHERE uid='".$_GET['delete_id']."'"; 
     $result_name = $mysqli->query($sql_name); 
     $row = $result_name->fetch_assoc(); 

     $sql_log = "DELETE FROM loginlog WHERE uid='".$row['uid']."'"; 
     $result_log = $mysqli->query($sql_log); 

     $sql_user = "DELETE FROM users WHERE uid='".$row['uid']."'"; 
     $result_user = $mysqli->query($sql_user) or die(mysqli_errno($mysqli)); 

     $_SESSION['success'] = "User \"".$row['firstname']." ".$row['prefix']." ".$row['lastname']."\" is deleted."; 
     header("location: ".BASE_PATH."/includes/views/users.php"); 
     exit(); 
    } 
} 

функция delete_user() называется в users.php И это работало отлично, но теперь это уже не .. Я что-то не замечаю?

+5

Вы уязвимы для [sql injection attack] (http://bobby-tables.com) и уязвимы для [Spider of Doom] (http://thedailywtf.com/articles/The_Spider_of_Doom). Наслаждайтесь разрушением вашего сайта. –

+0

Как это «не работает»? Где/как конкретно это происходит? – David

+0

sql injection кажется маловероятным, потому что это приложение для интрасети. Пауку обреченности, кажется, нужны страницы, которые удаляют запись (а не функцию, зависящую от javascript), и роботы не разрешены в соответствии с robots.txt. Или этого недостаточно? – MartijnICU

ответ

0

Я бы посоветовал:

function delete_user ($mysqli, $id) { 
    if(isset($id)) { 
     $sql_name = sprintf("SELECT * FROM users WHERE uid='%d'", $id); 
     $result_name = $mysqli->query($sql_name); 
     $row = $result_name->fetch_assoc(); 

     $sql_log = "DELETE FROM loginlog WHERE uid='{$row['uid']}'"; 
     $result_log = $mysqli->query($sql_log); 

     $sql_user = "DELETE FROM users WHERE uid='{$row['uid']}'"; 
     $result_user = $mysqli->query($sql_user) or die(mysqli_errno($mysqli)); 

     $_SESSION['success'] = "User \"{$row['firstname']} {$row['prefix']} {$row['lastname']}\" is deleted."; 
     return true; 
    } else { 
     return false; 
    } 
} 

Затем вы можете выполнить:

if(delete_user($sql, $_GET['id'])){ 
    header("location: ".BASE_PATH."/includes/views/users.php"); 
} 

Это всегда хорошо, чтобы использовать лучшие практики, даже в интрасети. Один румяный пользователь или кто-то, кто думает, что он что-то знает, и вы можете потерять столы или заколоть ряды. ВСЕГДА защищайте введенные пользователем данные, особенно от пользователей.

+0

Спасибо! Это сделал трюк! – MartijnICU

Смежные вопросы