如何验证端点中的受信任客户端



我有一个网站,在浏览器中,我正在发送一个POST请求到一个端点,其中包含有关该页面中用户访问交互的一些信息。javascript浏览器代码生成用户访问的UUID,当用户与页面交互时,我发送POST请求并更新访问信息。

在后台,我将这个访问信息保存到一个DB中。在后端服务中,我正在验证请求的主机是我的网页,也是一个有效的用户代理。但这很容易被curl、postman或其他修改主机和用户代理标头的东西劫持。由于服务是公共的,因为浏览器需要将信息发送到后端,我如何实现一个方法,签名或其他什么来确保后端接收的是来自我的网页,没有其他人发送到这个端点访问信息,而不是在网页中生成的?

如果在表单中,您创建了一个隐藏的输入,该输入具有在会话中传递的值。当你提交请求时,你检查提交的值是否等于你在会话中的变量。例如:

File1.php

<?php
$myvalue = uniqid();
$_SESSION['myvalue'] = $myvalue;
?>
<form action="File2.php">
<input type="hidden" id="var1" name="var1" value="<?php echo $myvalue; ?>" />
</form>

然后在收到post请求的文件中:php

<?php
if (isset($_POST['var1']) and isset($_SESSION['myvalue'] and $_POST['var1']==$_SESSION['myvalue']) {
// ok
}
else {
//not ok
}
?>

add ReCaptcha: https://developers.google.com/recaptcha/docs/v3

使得以非预期的方式发送数据几乎不可能。

最新更新