-1

目前一切都很好,除了用户可以手动输入一个 URL,这会弄乱我的站点的 CI 设置方式。例如:

www.somesite.com/folder/

控制器中的这个文件夹应该无法访问......并且需要重定向到该文件夹​​索引页面,这会给他们一个 404 错误。我尝试在 htaccess 文件中向 all 添加拒绝,但它似乎没有做任何事情。

www.somesite.com/folder/index.html

我实际上希望所有文件夹都像这样运行。我在文件夹中有一个 index.html 文件,但它没有被读取。有没有办法在 CI 中解决这个问题?我还遇到了用户能够手动访问控制器功能的问题。我已经尝试按照人们的建议将它们更改为私有,但是我的脚本无法访问它们。例如:

www.somesite.com/controller_file/some_function

如何阻止他们访问此功能?

4

2 回答 2

1

您可以创建一个白名单解决方案:

  1. 打开你的 application/config/routes.php
  2. 添加您要允许的路线。
  3. 添加一个包罗万象的路线.*并将其重定向到错误处理程序

Codeigniters 尝试按照它们在数组中列出的顺序匹配路由模式,因此每当用户输入您未明确允许的路由时,它都会将他重定向到包罗万象的路由

路由用户指南

编辑:您可以通过仅重定向与特定模式匹配的请求来创建黑名单逻辑,并为所有其他请求保留默认行为。

于 2012-12-21T09:30:35.267 回答
1

就拒绝访问文件系统而言,最好的办法是将您的ApplicationSystem文件夹放在 webroot 之外。然后编辑您的 index.php 以设置每个文件夹的新路径。我的一般设置如下所示:

+ Root
| - Application
| - System
| + Webroot
| | - js
| | - css
| | - index.php
| | - ...
+ - ...


至于您的第二个问题,为了防止某些功能直接从 url 访问,您需要在它们前面加上一个下划线。

所以而不是

public function some_function() {...}

利用 public function _some_function() {...}

然后可以在您的控制器中调用它$this->_some_function();

如果您有任何 AJAX 函数,则需要从其名称中删除下划线以使其可访问。您可以通过使用以下条件包装您的函数来阻止用户直接从 URL 访问它们。

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {}

以上检查请求是否通过 AJAX。

于 2012-12-21T09:19:36.457 回答