0

与其说是一种编程语言......我正在构建一个包含许多 jQuery Ajax 调用的网站,不仅仅是为了加载数据,还为了在我的网站中执行许多操作,包括管理员特定的操作,例如将组归属于用户,阻止用户访问, ETC...

我不通过 js 进行任何用户验证,我的 ajax 请求由 PHP 处理,因此对于所有这些管理操作,我首先确保用户实际上是管理员(我为此检查会话/数据库信息),我认为这是正确的方法,但有一件事一直困扰着我......

考虑一下,我的 admin.php 引用了一个包含所有这些 Ajax 调用的外部 .js 文件,普通用户无权访问管理页面,但他们可以很好地导航到我的 js 文件夹并查看我的 admin.php AJAX 脚本,这些脚本当然在参数中包含敏感信息,例如 URL、类型 (POST/GET)。我相信(在一定程度上,安全性很重要)我的 PHP 代码可以保护我的应用程序,但它仍然有点……磨我的齿轮……人们知道我的 URL 和我进行的调用类型。

也许我只是偏执,如果我的代码是安全的,我为什么要关心人们是否看到这些信息?(尽管在 Web 开发中将某些东西声明为 SAFE 应该是“自大”的定义),无论哪种方式,这都是我认为的:

  • 不在我的管理页面上使用外部文件,但它使事情组织得不太好......我喜欢将 HTML 与 JS/PHP/等分开
  • 某种.htaccess-fu?拒绝访问我的 js 文件夹最终会破坏功能,所以也许有人有更好的主意?
  • 压缩我的 js 文件(使用http://jscompress.com/或类似文件)并不是真正的解决方案,但它使事情更难阅读

对此的任何输入都会很棒。

4

5 回答 5

2

为什么拒绝访问您的 js 文件夹会破坏功能?您可以保持文件可访问,但确保它们不能列出内容,这已经迫使人们“猜测”您的文件名。

除此之外,老实说,我认为他们能够扣除您拨打的电话没有任何问题。

只要您的调用在您的 php 后端得到保护,这应该不会给您带来任何麻烦。

此外,缩小是抽象可见代码的好方法,但调用总是很容易被 firebug 或 Fiddler 嗅出。

于 2013-02-06T14:02:14.917 回答
1

首先,用户不应该能够在不知道他们的确切名称的情况下浏览您的 js 文件。您是否禁用了 httpd 中的“索引”选项?

Options -Indexes
于 2013-02-06T14:00:08.243 回答
0

如果您想对未经身份验证的用户隐藏 JS 文件,您可以将 .JS 文件重命名为随机名称,例如“2a2b1a82.js”。然后创建一些非常愚蠢的 PHP 文件,它只检查用户会话,如果授予访问权限,则在 '2a2b1a82.js' 上执行读取文件:

<?
session_start();
if ($_SESSION['login'] == true) {
  header('content-type: text/javascript');
  readfile('2a2b1a82.js');
}
?>

但除此之外,您的安全性不应依赖于对某些 javascript 文件的访问。正如您所说,检查由 javascript 文件调用的 PHP 文件中的用户会话就足够了。

于 2013-02-06T14:03:51.420 回答
0

首先,仅仅考虑“通过混淆保护”绝不是一个好主意,因为它只是假装安全。

需要明确的是,我不想告诉您不应该通过打开目录列表来隐藏您的 js 文件。但是你应该把更多的精力放在检查你的代码是否真的节省而不是混淆太多。

混淆(取决于你做了多少以及以何种方式)可能会导致代码更难维护,因此更容易出错。

要做的一件重要事情是,不要将 php 文件或配置文件(存储密码的位置)放在域指向的根路径中。(它们不应通过 url 访问)。您应该只有一个包含引导php 文件的条目文件。并在您的文件中使用例如 RewriteRules.htaccess重定向到一个入口点。

结构如下:

project/scripts/
project/scripts/bootstrap.php
project/config/
project/logs/
project/public/  <---- //that is where http[s]://doamin.tld/ points to
project/public/index.php

project/public/index.php包括project/scripts/bootstrap.php你的代码逻辑发生在那里。

这将确保即使由于某种原因您的服务器的配置文件被搞砸并发送.php文件的内容而不是执行脚本,访问者也只会看到他无法访问的文件的包含。(或者另一个例子是?-scgi 模块的 php 错误,它允许查看可通过 url 访问的每个 php 文件的源)

您可以想到的另一件事是使用 php-fpm,您可以在其中以另一个用户的身份运行 php,然后是 web 服务器,并使 php 文件只能由 php 读取。

您应该考虑的另一件重要的事情是您的 ajax 调用是否真的安全。例如,对于删除、修改或创建数据等操作,对会话 cookie 的简单检查将无助于抵御基于当前登录用户被带到恶意站点的攻击。

于 2013-02-06T14:42:07.603 回答
0

这里还有其他方法。我不知道你是否熟悉 Wordpress。编写了一个单独的 php 文件来处理 ajax 请求。对于该文件,您需要传递参数。您要发送一个额外的参数,称为nounce. 每个会话都会生成一个通知。如果 nounce 有效,那么您会发现发出的请求类似于 action/ajax-url。

您需要做的就是调用这个特殊的 php 文件,为每个用户创建 unqiue nounce,传递参数。检查nounce并继续操作。

即使不受欢迎的用户可以看到这个特殊文件,他们也无法猜测该通知是如何创建的。

于 2013-02-06T14:12:55.360 回答