【问题标题】:Prevent user to see directly PHP url in Javascript防止用户在 Javascript 中直接查看 PHP url
【发布时间】:2012-09-20 01:26:39
【问题描述】:

我想阻止用户在 Javascript 中直接看到 PHP URL。 示例:

{
$.ajax(
{
    type: "POST",
    url: "search.php",
    data: dataString,
    cache: false,
    success: function(html)
    {
        $("#display").html(html).show();
    }
});
}return false;

是否有可能或以任何方式阻止用户在查看我的页面源时看到 php URL?有时用户可能会尝试直接打开 php url。

感谢您的帮助。

【问题讨论】:

  • 所以您的意思是不允许用户查看 PHP URL?用户无法使用 PHP,因此即使他们尝试过,也无法看到它。那么我可以假设您的意思是 POST 变量正确吗?
  • 我假设,您不希望用户看到 search.php 。这是不可能的。 js使用的一切都在客户端,一旦有东西在客户端,你就无法隐藏它
  • @EduardoLávaque 不,我的意思是当用户想要查看我的页面的源时,他/她可以看到仍然在源中的 php url。我的帖子 JS 中的示例。 search.php
  • @Jashwant 那么现在我们如何防止用户直接打开 PHP url 呢?
  • 如果您的页面位于公共服务器上,那么任何人都可以随时使用任何参数访问它。毕竟,它是public

标签: php javascript


【解决方案1】:

我(或任何客户)仍然可以使用任意数量的工具来解决这个问题(包括 99% 内置的浏览器中的内置调试器)——不值得混淆它。

如果您担心直接访问,请在脚本中检查 an AJAX request。 (仍然可以破解,但这是一个开始)。同样在previous answer 中提供:

<?php

  $isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH'])
         && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
  if (!$isAjax) die('Unauthorized access');

  /* rest of search.php */

【讨论】:

  • 是的,就像 Jashwant 和 Brad 所说的那样,实际上没有任何方法可以隐藏它,如果有,那么它并不完美。 ://
  • 这里的问题是出于某些安全原因,某些 Web 配置不允许 HTTP_X_REQUESTED_WITH 标头yiiframework.com/forum/index.php?/topic/…
【解决方案2】:

如cmets中所述,

如何防止用户直接打开PHP url?

您应该在您的 php 中创建一个非常长的随机字符串(令牌)的会话并将其传递给 js ajax 函数,以便它与 ajax 请求一起发送令牌。在服务器端,您可以检查是否生成了相同的令牌。您可能希望尽快使令牌过期。

我不知道,如果它是标准方式,但可以为您提供一个开始。

【讨论】:

  • 令牌的问题是您传递给 javascript 的任何信息都可以很容易地被破译和模仿。即使您为永远的请求创建一个新的哈希,生成该哈希的算法也是可见的。长话短说,如果您希望它受到保护,请不要授予用户访问权限或可见性。
【解决方案3】:

好吧,把事情说清楚..

  1. 一旦它在客户端(浏览器)上,您就无法隐藏它。用户仍然可以下载或查看客户端返回的源代码。
  2. 实际上并不需要混淆,因为您只是让事情变得复杂而不是保护任何东西。
  3. 但是任何服务器端代码 (PHP) 都不会显示,因为它是由服务器端处理的,服务器只返回服务器端代码的执行结果。

如果您遇到问题,您可以做的是检查 $_POST 和 $_GET 参数在到达您的 PHP 代码时是否有效,从而使每个 POST 和 GET 请求都有效且安全。有点像这样

<?php
  if(isset($_POST['username']) && isset($_POST['password'])){
    //everything seems fine
    echo 'ok';
  }
  else{
  //someone is doing a direct acess
     header('index.php');
  }
?>

或检查会话以仅为登录用户保护您的页面

  <?php
      if(isset($_SESSION['userid'])){
        //everything seems fine
        echo 'ok';
      }
      else{
      //someone is doing a direct acess
         header('index.php');
      }
    ?>

【讨论】:

  • 如果我使用你的 2 种方式,那么现在我已经登录了,如果我打开示例 search.php(可能在查询中查看任何数据)呢?
  • 好吧,如果使用有效的请求方法及其参数请求php,它仍然可以打开。 @Brad Christie 的回答是一个好的开始,但我遇到了很多关于它的问题,因为一些 Web 服务器配置删除了该标题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
相关资源
最近更新 更多