仅允许我想发送请求的客户

时间:2017-02-28 15:23:05

标签: php json rest api security

我正在尝试用PHP创建一个简单的REST API,到目前为止我已经得到了这个:

$mysqli = new mysqli("localhost", "root", "root", "db");

$method = $_SERVER["REQUEST_METHOD"];
$request = explode("/", trim($mysqli->real_escape_string($_SERVER["PATH_INFO"]),"/"));

if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
    exit();
}
switch ($method) {
    case "GET":
        if ($stmt = $mysqli->prepare("SELECT * FROM ".$request[0]." WHERE id=?")) {
            $stmt->bind_param("i", $request[1]);
            $stmt->execute();
            $res = $stmt->get_result();
            echo json_encode($res->fetch_object());
            $stmt->close();
        }
        else echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error;
    break;
}

$mysqli->close();

它就像一个魅力,但我需要能够接受来自我想要的客户的请求,换句话说,我需要它能够拒绝未经授权的客户的共存。

经过一番思考后,我想到用密码实现类似盐哈希的东西,但它可能不是最好的方法,我不知道如何做到这一点。

其他想法是使用ajax请求发送某种预设短语,但它可能很容易被窃取"使用像Wireshark这样的网络分析器。

这些是我到目前为止的想法,我真的很感激一些帮助。

编辑:现在我发送飞机数据或出现安全问题没问题,我想要的只是从我想要的客户端接收数据。

1 个答案:

答案 0 :(得分:0)

  

它的工作原理就像一种魅力,但是我需要只接受我想要的客户的请求,换句话说,我需要它能够拒绝来自未授权客户的礼物。

很多人认为他们需要能够做到这一点,但是it's not possible

这就是您的问题的答案:不可能可靠,安全地仅允许受信任的客户端通过公共网络(即Internet)连接到您的公共可访问服务器。您尝试创建的用于阻止未经授权的客户端的任何机制都可以被逆向工程师击败。

您最好将时间花在确保服务器端代码正确运行上,即使客户端软件是恶意的。