为了账号安全,请及时绑定邮箱和手机立即绑定

API 请求:如何确保只有“允许”的网络表单会收到答复?

API 请求:如何确保只有“允许”的网络表单会收到答复?

PHP
繁花如伊 2021-12-24 09:13:01
我经营一个免费创建数字生成内容的网站。我的访问者也不需要帐户即可开始下载。它的工作非常简单:最终用户填写表单,表单向 PHP 脚本(“API”)发送请求,PHP 脚本返回结果。                 ?                  +---------+              +---------+|         | -----------> |         ||FORM.html|              | API.php ||         |<-------------|         |+---------+              +---------+               digital                             content              目前,PHP 脚本将向任何使用正确参数调用它的内容发送答案。这使得其他网站很容易窃取我的表单并劫持我的服务。此外,足够熟练的人可以通过 CURL、WGET 或任何自动化脚本请求此“数字内容”。所以,我的问题是:问:在回答之前,我如何确保请求已从我网站上的表单发送?到目前为止,我尝试在我的服务器上添加一个额外的 PHP 文件,该文件将在将请求发送到 API 之前“签署”请求 (authenticate.php)。那行得通,但当然,它只是将问题移到了这个新文件中。这个脚本会很高兴和愚蠢地签署所有扔给它的东西并将其传递给 API.php我也考虑过在表单中添加额外的变量,但这也无济于事。黑客只需要识别和复制这些变量。我不需要最终的安全性,因为它“只是”一幅画。但是任何检查都比没有好。什么是明智的?编辑:我最关心的是使用我的 API 的其他网站。由于内容是免费的,我不太关心访问 API 的机器人或脚本。尽管防止这种情况发生也很好。
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

我也考虑过在表单中添加额外的变量,但这也无济于事。黑客只需要识别和复制这些变量。

您可以通过不每次都使用(并检查)相同的值,而是使用只能在有限时间内使用一次的令牌来使这更难。这基本上就是所谓的 CRSF 令牌。

一些有关该主题的更多信息的链接:

什么是 CSRF 代币?它的重要性是什么?它是如何工作的?
https://en.wikipedia.org/wiki/Cross-site_request_forgery
https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)

您尝试使用 CSRF 令牌应对的典型攻击/问题是有人触发了允许登录用户以其名义执行的操作;但是在您这里的情况下,您可以以非常相似的方式实现它,以尝试防止人们或机器人在不使用您的表单的情况下将数据发送到您的端点。


查看完整回答
反对 回复 2021-12-24
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

 Use google Captcha in your form

   https://www.google.com/recaptcha

   //take a leaf out of payment gateway validation

    $acceptfrom = array(

        'www.yourserver.com',

        'yourserver.com'

    );




    if( !in_array( $_SERVER['REMOTE_ADDR'], $acceptfrom ) )

    {

        //break and redirect to another page here

    } else {

    //include Captcha validation here

    //validate form variables and send to API


    } 


查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号