发现用nginx 的try_files $uri $uri/ /index.php$is_args$args; 这样重写不太安全

这是我的项目结构:

clipboard.png
用以上方法重写的话:
如果输入www.***.com/app/*.php,这样的话,虽然代码执行不成功,但是就能知道存在这样的文件(可以猜文件了)

当然我知道现在的有些框架(laravel)有种做法是:index.php和前端资源文件放入public文件夹中(网站root配到public下面)

阅读 10.4k
3 个回答

最简单的办法是在与try_files同级的地方写一条root限制这个try_files作用位置。

try_files按其后面的参数顺序检查文件是否存在,返回第一个找到的文件,必然会碰到题主这种安全问题,参考主流框架laravel之类的做法写最省事。

要明白即使用 rewrite 最终效果也是类似的。

因为网站根目录底下的所有文件本身就是应该全部可访问的(或部分不能访问,通过设置强行过滤,比如 .htaccess 文件)。

你可以把整个项目放到一个目录下,比如20161208,然后修改为

try_files $uri $uri/ /20161208/index.php$is_args$args;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏