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.
**问题:**这是安全隐患吗?
有人能够使用此信息在数据库上执行非法操作吗?
在Javascript中输入SQL命令信息(尽管是加密的)是没有充分理由的.它不应该在那里.永远不会.
使用ajax,javascript和数据库的常规方法非常简单:
使用ajax将命令发送到PHP文件.这应该是一个简单的命令,例如:"删除此地址"或"插入此地址".要意识到的重要一点是这些命令是由用户生成的,因此没有理由隐藏或加密它们.如果要保护数据传输,可以使用SSL安全连接.
处理ajax调用的PHP文件应该执行所有安全检查:此用户是否有权执行此操作?数据有效吗?只有在传递所有检查时才应构建并执行SQL命令.
我认为没有理由偏离这种工作方式.应仔细检查发送到PHP脚本的数据,并且用户输入不得直接用于构建SQL命令字符串.用户输入应仅用作SQL中字段的值,最好通过绑定它们,或直接用于PHP程序流.其他任何东西都是安全风险.