Ajax调用并保护.js文件信息

时间:2013-02-06 13:56:46

标签: php javascript security

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

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

考虑到这一点,我的admin.php引用了所有这些Ajax调用的外部.js文件,普通用户无权访问管理页面,但他们可以很好地导航到我的js文件夹并查看我的管理员。 php AJAX脚本,这些脚本当然有参数中的敏感信息,比如URL,类型(POST / GET)。我相信(在某种程度上,安全性是一个非常重要的)我的PHP代码来保护我的应用程序,但它仍然有点...... 研磨我的齿轮 ...人们知道我的网址以及我拨打的电话类型。

也许我只是偏执,如果我的代码是安全的,为什么我会关心人们是否看到这些信息? (虽然在Web开发中宣称某些东西应该是“自大”的定义),无论哪种方式,这都是我的想法:

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

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

5 个答案:

答案 0 :(得分:2)

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

除此之外,老实说,我没有看到任何问题,他们可以扣除你的电话。

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

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

答案 1 :(得分:1)

首先,用户不应该在不知道其确切名称的情况下浏览您的js文件。您是否在httpd?

中禁用了“索引”选项
Options -Indexes

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

即使不受欢迎的用户可以看到此特殊文件,他们也无法猜测如何创建nounce。

答案 4 :(得分:0)

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

要明确我不想通过转换目录列表告诉您不应该隐藏您的js文件。但是你应该投入更多精力来检查你的代码是否真的存在而不是模糊不清。

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

要做的一件重要事情是,您不要在您的域指向的根路径中放置php文件或配置文件(存储密码的位置)。 (它们不应该通过URL访问)。您应该只有一个包含 bootstrap php文件的条目文件。并使用例如在.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文件的内容而不是执行脚本,访问者也只会看到文件的包含这超出了他的范围。 (或者另一个例子是cgi模块的php ?-s错误,它允许查看url可以访问的每个php文件的来源。

你可以想到的另一件事是你使用php-fpm你可以运行php作为另一个用户然后是web服务器,并使php文件只能被php读取。

您应该考虑的另一个重要事项是,如果您的ajax呼叫确实是安全的。例如对于删除,修改或创建数据等操作,对会话cookie的简单检查无助于抵御基于当前登录用户被带到恶意站点的攻击。<​​/ p>