>[danger] 永远不要相信用户提交的数据!
## 安全开发指导
1. 参考ThinkPHP官方[安全指导](https://www.kancloud.cn/manual/thinkphp5_1/354111)
2. 接口接收数据时要对数据进行js脚本过滤
>[info] 以上方法仅作为安全辅助,没有一劳永逸的方法可以防止所有攻击。要做好数据检查,选用合适的过滤方法。
## 禁止访问敏感目录
由于框架将入口文件从public移动到了应用目录,使一些不该被访问的目录也暴露了出来。如果将入口文件移动到public目录,需要改动的地方比较多,所以不建议这样做。
为了安全考虑,可以将一些敏感目录设置为禁止访问。
【Nginx】
在Nginx配置文件中,加入以下规则
```
location ^~ /addon{
deny all;
}
location ^~ /runtime {
deny all;
}
location ^~ /extend{
deny all;
}
location ^~ /application {
deny all;
}
location ^~ /route{
deny all;
}
location ^~ /thinkphp {
deny all;
}
location ^~ /vendor {
deny all;
}
```
【Apache】
在框架根目录的.htaccess文件加入以下规则
```
RewriteRule ^addon - [F,L]
RewriteRule ^runtime - [F,L]
RewriteRule ^extend - [F,L]
RewriteRule ^application - [F,L]
RewriteRule ^route - [F,L]
RewriteRule ^thinkphp - [F,L]
RewriteRule ^vendor - [F,L]
```
完整内容
```
<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
RewriteRule ^addon - [F,L]
RewriteRule ^runtime - [F,L]
RewriteRule ^extend - [F,L]
RewriteRule ^application - [F,L]
RewriteRule ^route - [F,L]
RewriteRule ^thinkphp - [F,L]
RewriteRule ^vendor - [F,L]
</IfModule>
```
## 系统设置
1. 在config/app.php 文件中deny_module_list 中加入禁止访问模块
2. 在config/app.php 文件app_debug 改为false
## 后台地址重命名
1、public下复制index.php里面的内容新建一个admin.php(**可以自定义,注意与伪静态中的文件名保持一致**),
~~~
Container::get('app')->run()->send();
~~~
替换为
~~~
Container::get('app')->bind('manage')->run()->send();
~~~
2、config/app.php
deny_module_list 中增加 manage,例如:
~~~
'deny_module_list' => ['common','crontab','job','manage'],
~~~
修改
~~~
'rename_manage' => true,//后台是否重名了,后台重命名需要开启
~~~
3、修改nginx伪静态配置为:
~~~
location / {
if (!-e $request_filename){
rewrite ^/admin.php/(.*)$ /admin.php?s=/$1 last;
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
}
~~~
apache的伪静态需要配置为:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
RewriteRule ^admin.php/(.*)$ admin.php?s=/$1 [QSA,PT,L]
</IfModule>