【发布时间】:2017-08-04 09:34:50
【问题描述】:
我仍在学习并尝试编写尽可能小而有效的代码。
所以我从 HTML 表单向 mySql 插入数据时的常规方法是 使用 Jquery 获取输入值:
var formdata = {};
$('.formdata').each(function(){
formdata[ $(this).attr('name') ] = $(this).val();
});
使用 Ajax 将其发送到 PHP:
$.ajax({
url: 'file.php',
method: 'post',
data: {formdata: formdata},
success: function(result){
console.log(result)
}
});
抓取 POST 并将其放入数组中:
$params_array = array(
':artNr' => $_POST['formdata']['artNr'],
':etc' => $_POST['formdata']['etc'],
);
最后放到mySql中:
$query = "INSERT INTO table SET artNr = :artNr, etc = :etc";
try{
$stmt = $db->prepare($query);
$result = $stmt->execute($params_array);
}
catch(PDOException $ex){
die("Failed to run query: " . $ex->getMessage());
}
我现在的问题是:
将值从 POST 循环到数组是一种不好的方法吗?
foreach( $_POST['formdata'] as $name => $value ){
$params_array[$name] = $value;
}
询问的原因是我不知道您是否能够从控制台将内容发送到我的 JS“formdata[]”并进行黑客攻击?
我的意思是我将 HTML 表单中存在的任何内容循环到我的数据库中。我的“params_array”中没有任何硬编码键..
也许还有更多我不知道的安全漏洞?
我知道 PDO 对于 SQL 注入非常安全?!
【问题讨论】:
-
不是 PDO 对 SQL 注入是安全的,准备好的语句是。您可以对
mysqli_驱动程序执行相同的操作,这也很安全。我知道这根本不能回答你的问题,它只是一个小提示。 -
一些想法,您应该明确您期望
file.php将返回的数据类型。我可以建议设置您的$.ajax属性dataType: "json"并在您完成处理后将结果返回到您的file.php中:echo json_encode( $result->fetchAll() ); -
@AnwarNairi 我不需要将 dataType 设置为 JSON 就可以使用 echo json_encode 返回它。我已经这样做了,并且有效。但是使用 dataType 更安全吗?
-
@Twinfriends 好的,谢谢你清除它。
-
“问的原因是我不知道你是否能够从控制台向我的 JS“formdata[]”发送东西并进行黑客攻击?” - 当然,如果您期望到达您的服务器的所有请求甚至都由“浏览器”发送,那您就太天真了……任何人都可以向您的脚本发送 any 数据,因此您不能依赖任何东西,但必须始终检查。
标签: php jquery ajax security pdo