我有一个具有以下功能的网站:用户来www.mysite.com/page.php
。该页面上的Javascript对www.mysite.com/api.php
进行ajax API调用,并在同一页www.mysite.com/page.php
上显示结果
我害怕有人开始在自己的软件上使用我的api.php,因为使用www.mysite.com/api.php
花了我一点钱。因此,我希望只有访问过该网页www.mysite.com/page.php
的用户才能从www.mysite.com/api.php
获得有效结果。用户无法以任何方式登录我的网站。
这样做的正确方法是什么?我想我可以在用户访问 page.php 时启动会话,然后以某种方式首先检查 api.php 是否存在具有有效会话ID的会话?
答案 0 :(得分:0)
如果引用者在域外阻止它,请使用$ _SERVER ['HTTP_REFERER']检查引荐来源。
请注意,人们可以改变他们的REFERER,因此不安全。
另一个更好的解决方案可能是来自Google https://www.google.com/recaptcha/intro/index.html
的CAPTCHA答案 1 :(得分:0)
如果您只是希望用户在使用api.php之前访问page.php,则会话即可。
答案 2 :(得分:0)
通常情况下,如果您需要“软”保护,请使用POST动词从您的网站获取结果。然后,如果用户在他们的浏览器中访问URL并只输入api.php调用,他们将无法获得结果。这不能保护您的网站,但它会使搜索引擎远离该网址,并且可以很好地浏览它。
否则,php有很多身份验证插件。
例如答案 3 :(得分:0)
您可以通过多种方式检查请求,例如令牌验证,会话验证,甚至是服务器' HTTP_REFERER'变量
答案 4 :(得分:0)
您在隐藏输入字段中发送的Cookie,HTTP-Referer,其他POST数据或某些表单数据不够安全,无法确保用户来自您的网站。
用户可以通过修改http-headerdata(或者如果您使用cookie,通过更改客户端计算机上的cookie文件)轻松更改其中的所有内容。
我更喜欢PHP-Session结合对机器人(例如蜜罐)的良好保护,因为如果你正确使用它们,你就不会那么容易。
请注意:如果您的网站特别存在机器人,则无论如何都会丢失。所以没有100%的保护。