【问题标题】:What is the best way to ensure a page was only accessed through the AJAX form in order to process it? [duplicate]确保仅通过 AJAX 表单访问页面以进行处理的最佳方法是什么? [复制]
【发布时间】:2019-04-17 16:05:43
【问题描述】:

我在 index.php 上有一个通过 order.php 处理的 AJAX 表单。

如何确保在处理之前通过 AJAX 表单访问 order.php,以便忽略对 order.php 的直接访问请求?

我尝试使用 Session 变量,并确保 index.php 中设置的 session 变量在处理 order.php 之前设置,但是如果有人先进入 index.php,然后直接进入 order.php,它仍然会处理order.php,即使它不是通过 AJAX 表单。

【问题讨论】:

  • 你真的不能。你也不应该在意。它们都是网络请求。您需要验证它是否为您提供了您期望的数据,而不是验证请求是如何产生的。
  • @Taplar:问题出在我们的数据验证中,如果表单为空,则会引发异常,因此当爬虫等访问订单时,我会收到有关此异常的电子邮件警报。 php页面直接。

标签: javascript php jquery ajax ajaxform


【解决方案1】:
if (isset(($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') && $_SERVER['HTTP_X_REQUESTED_WITH']))
{
  // Code that will run if this file called via AJAX request
} 
else 
{
  // Code that will run when accessing this file directly
} 

【讨论】:

  • 这不是一个完全可行的解决方案。在请求中添加标头以伪造此信息是微不足道的。
  • @RoryMcCrossan:它可能并不完美,但这正是我想要的。对于实际使用来说,它足以避免爬虫等直接处理 order.php 页面。如果有人真的为了处理我们的 order.php 页面而费心伪造他们的标题,那么他们可以从中获得乐趣。
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多