目前一切都工作正常,除非用户可以手动输入URL,这会弄乱如何为我的网站设置CI。例如:
www.somesite.com/folder/
控制器中的此文件夹不应该是可访问的...并且需要重定向到该文件夹索引页面,这将给出404错误。我试过在htaccess文件中为所有人添加deny,但它似乎没有做任何事情。
www.somesite.com/folder/index.html
我实际上希望所有文件夹都能正常运行。我在文件夹中有一个index.html文件,但它没有被读取。有没有办法在CI中解决这个问题?我也遇到了用户能够手动访问控制器功能的问题。我试图将它们改为私有,正如人们所建议的那样,但是我的脚本无法访问它们。例如:
www.somesite.com/controller_file/some_function
如何阻止他们访问此功能?
答案 0 :(得分:1)
至于拒绝访问文件系统,最好的办法是将Application
和System
文件夹放在webroot之外。然后编辑index.php以设置每个文件夹的新路径。我的一般设置如下:
+ Root
| - Application
| - System
| + Webroot
| | - js
| | - css
| | - index.php
| | - ...
+ - ...
至于你的第二个问题,为了防止直接从网址访问某些功能,你需要在下划线中添加它们。
所以而不是
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。
答案 1 :(得分:1)
您可以创建白名单溶剂:
.*
并将其重定向到errot处理程序Codeigniters尝试按照它们在数组中列出的顺序匹配路由模式 每当用户输入你没有明确允许的路线时,allqays会将他重定向到catchall路线
编辑: 您可以通过仅重定向匹配特定模式的请求来创建黑名单逻辑,并保留所有其他模式的默认行为。