2015-08-14 55 views
0

对于一个web应用程序,我构建的删除用户函数停止工作。我没有改变任何与此功能相关的东西。所以我很慌张。 我在PHP中安装了PHP控制台(和应用程序)。但它没有提供任何错误或警告。

我使用bootbox来验证用户是否真的应该被删除:

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

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函数传递 这工作得很好,但现在不再是了..我可以忽略一些东西吗?

+5

你很容易受到[sql注入攻击](http://bobby-tables.com)的影响,并且很容易受到[Spider of Doom](http://thedailywtf.com/articles/The_Spider_of_Doom)的影响。享受你的网站被摧毁。 –

+0

它如何“不起作用”?它在哪里/具体如何失败? – David

+0

SQL注入似乎不太可能,因为它是一个Intranet应用程序。厄运蜘蛛似乎需要删除记录的页面(不是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