使用jquery Ajax发送SQL查询的安全性

ash*_*raz 0 php security authentication ajax jquery

JQUERY AJAX

var action="G3DKisVzJmPZa8c7nKTHJkqEmtSezwLNF3FVquwsNMi05OGkhNIdigm/EDUndoROtGQgmugg568OidxYzB5eJ5e9CAcrahEBBNcARkfMdy5givNlXsyPjTA4ulBRsGap|VjZgMVTK7unm+YL+b4lAfECAVwKePb/R6etD95oGAbw=";
var table="LWwkQy/JbJl959qQn/1jAZ+wwsz4qlGXJmN0P1/3/2maJCug+rh5RB2TmgriPxX1iVRKSXoWFQefvfRgFjMb0ys4YLQty10Xnqi1ubO+JfrrZ8fuEGu6DGmWNHuVhwCU|aV7uxHNJGmJ08wk0dzRhJcfT1COXHWJSKmtO3KHclLA=";
var fields="PatIyJMBdUYsR87bLwlVaar7xnPOkMaqq1o/WEnQNwJrurySi2jZO66Y0iQube4WTUaBork1PELJ94xqBU8oPMQz7+CZWBum9oeJpsVS+3CXAx6bmDCf08EDXz8x/4m1trs8CLA7ihhBYAeJVb93i+Giszp72pZsOQreYhmE12A=|cFOi51p8JRNFDSjUlQB2mtrt6P/1mVsNpqEBR+5QWxQ=";
var params=Yer+","+Tabaghat_From+","+Tabaghat_To+","+Mabna;

$.ajax({
    url : "ajax/operationAJAX.php",
    type: "POST",
    data : {action:action,table:table,fields:fields,params:params},
    success: function(response, textStatus, jqXHR)
    { 
       if($.trim(response)!="empty")
       {
         TShowMessage("tblMessage",response);                    
       }
       else
          TShowMessage("tblMessage","error:fail to insert data");           

    },
    error: function (jqXHR, textStatus, errorThrown)
    {

        alert("error"+textStatus);  
    }
}); 
Run Code Online (Sandbox Code Playgroud)

PHP

$action=mc_decrypt($_POST["action"]) ;
if($action=="delete")
{
    //Table name
    if(isset($_POST["table"]) && !empty($_POST["table"]))
        $table=mc_decrypt($_POST["table"] ) ;
    else
        die('table name does not define');
    //===================               
    //parameters
    if(isset($_POST["params"]) && !empty($_POST["params"]))
        $params=explode(',',$_POST["params"] );
    else
        die('parameters does not define');
    //===================
    //where 
    if(isset($_POST["where"]) && !empty($_POST["where"]))
        $where=mc_decrypt($_POST["where"] );
    else
        die('where does not define');
    //===================

    $delete=$dbHandle->delet($table,$params,$where);

    if(!empty($delete))
    { 
         echo "data deleted!";
    }
    else
    {
        echo "empty";
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用AES encryption并加密action,TableName,FieldTable,Params,Where并发送至服务器和服务器基础上action执行insert sql,select sql,delete sql,update sql.

**问题:**这是安全隐患吗?

有人能够使用此信息在数据库上执行非法操作吗?

KIK*_*are 7

仅使用固有安全的方法

在Javascript中输入SQL命令信息(尽管是加密的)是没有充分理由的.它不应该在那里.永远不会.

使用ajax,javascript和数据库的常规方法非常简单:

  1. 使用ajax将命令发送到PHP文件.这应该是一个简单的命令,例如:"删除此地址"或"插入此地址".要意识到的重要一点是这些命令是由用户生成的,因此没有理由隐藏或加密它们.如果要保护数据传输,可以使用SSL安全连接.

  2. 处理ajax调用的PHP文件应该执行所有安全检查:此用户是否有权执行此操作?数据有效吗?只有在传递所有检查时才应构建并执行SQL命令.

我认为没有理由偏离这种工作方式.应仔细检查发送到PHP脚本的数据,并且用户输入不得直接用于构建SQL命令字符串.用户输入应仅用作SQL中字段的值,最好通过绑定它们,或直接用于PHP程序流.其他任何东西都是安全风险.