我目前正在创建一个Facebook Canvas游戏,目前我有一个php脚本将玩家数据(从AJAX帖子收到)插入我的数据库。这些数据来自Facebook的Graph API,在Javascript函数中,然后由AJAX发送到PHP脚本。现在一切都很完美,但是对于SQL注入它并不安全。
我想让我的SQL查询更安全,所以我一直在阅读准备语句,绑定参数/参数化语句和消毒数据,但我发现它有点令人困惑。
我理解SQL注入是如何工作的,以及使用预准备语句背后的想法,但在尝试插入已被AJAX接收的数据时,我很难实现它。这是我最近的尝试:
<?php
session_start();
require_once 'facebook-php-sdk-v4-4.0-dev/autoload.php';
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\Entities\SignedRequest;
use Facebook\FacebookSession;
use Facebook\FacebookSignedRequestFromInputHelper;
use Facebook\FacebookCanvasLoginHelper;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookOtherException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
FacebookSession::setDefaultApplication('myappid', 'myappsecret');
$servername = "myservername";
$username = "myusername";
$password = "mypassword";
$dbname = "mydbname";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// prepare and bind
$stmt = $conn->prepare("INSERT INTO player (fb_id, f_name, l_name, email, gender) VALUES
(?, ?, ?, ?, ?)");
$stmt->bind_param("sssss", $userid, $userfirst_name, $userlast_name, $useremail, $usergender);
// set parameters (these variables are received from AJAX) and execute
$userid = $_POST['userid'];
$userfirst_name = $_POST['userfirst_name'];
$userlast_name = $_POST['userlast_name'];
$useremail = $_POST['useremail'];
$usergender = $_POST['usergender'];
$stmt->execute();
echo "New records created successfully";
$stmt->close();
$conn->close();
?>
可悲的是,当我尝试这个时,没有任何东西插入我的数据库。 Facebook数据肯定会到达PHP脚本(因为它在我尝试实现这个准备好的语句之前成功插入)所以问题可能在“准备和绑定”部分?
如果有人知道这里可能出现什么问题,或者任何其他有关使其更加安全的建议,我将不胜感激。
提前致谢!