有关使用 php 和 jquery 从 html 表单进行动态 mysql 更新查询的安全性


Security regarding dynamic mysql update query from html form using php and jquery

我做了一个php函数和一个jquery函数,目的是能够从任何html表单更新我的任何数据库表。

我所要做的就是将适当的 TABLE 标签添加到表单中,将适当的 ROW 标签添加到输入中。

它工作正常,但我从安全方面担心它。

请注意,我正在使用$query=mysql_real_escape_string(stripslashes($query));以及我的 where 子句中的"ACCOUNT_ID=".$_SESSION['account'],它应该防止一个用户能够覆盖另一个用户的数据。

但是我徘徊着我可能错过了什么,或者可能出现什么其他问题?

数据库.php

<?
 class Database {
    public function __construct() {
    $server = "localhost";
    $username = "user";
    $pass = "password";     
    mysqli_connect($server, $username, $pass) or die("cannot connect");
    mysqli_select_db("database") or die("cannot select DB");
}
public function Update($query) {
    $query=mysql_real_escape_string(stripslashes($query));
    $response = mysqli_query($query);
    return $response;
}
?>

更新.php

<?
require_once 'database.php';
session_start();
Update($_POST);
function Update($fields) {
    $db = new Database();
    $table = $fields['TABLE'];
    unset($fields['TABLE']);
    $qry = array();
    foreach ($fields as $key => $value) {
        array_push($qry, " " . $key . "='" . $value . "'");
    }
    $qry = implode(",", $qry);
    $update = "UPDATE $table SET";
    $clause = "WHERE ID=" . $fields['ID'] . " AND ACCOUNT_ID=".$_SESSION['account'];
    $sqlQry = $update . $qry . $clause;
    $response = $db->Update($sqlQry);
    return $response;
}
?>

user_details.php

 <head>
  <script src="Scripts/jquery-1.8.3.min.js" type="text/javascript"></script>
 </head>
 <body>
 <form id="myForm" TABLE="USERS">
 <input id="name" type="text" ROW="USER_NAME"/>
 <input id="age" type="text" ROW="USER_AGE"/>
 <input id="email" type="text" ROW="EMAIL"/>
 <input class="submit" type="submit" value="update"/>
 </form>
 <script>
 $(function(){
   $('.submit').click(function(){
     var data = {};
     var form = $(this).parent();
     data.TABLE = form.attr('TABLE');
     var fields=$('form input, form select');
     $(fields).each(function(i, e) {
       var input = $(e);
       var dbKey = input.attr('ROW');
       var value = input.attr('value');
       if (dbKey && value) {
          data[dbKey] = value;
         }
       $.post('update.php',data);
     });
    });
 </script>
 </body>

使用预准备语句来确保没有 sql 注入攻击。 您永远不能信任用户的数据,也永远不要依赖对其进行清理,因为总会有您不检查的情况。 一个很好的例子可以在这里找到:如何防止 PHP 中的 SQL 注入?