0

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

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

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

请注意,我在 where 子句中使用$query=mysql_real_escape_string(stripslashes($query)); 了 and ,"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>
4

1 回答 1

0

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

于 2013-09-05T17:12:39.430 回答