发布时间:2026-07-21阅读(1)
我所说的可能很多人都知道,掌握得也比较片面,只是平时的一些积累,希望能给初学者一些帮助吧。
如果有没有考虑到的,欢迎留下您的想法,让我们一起把网站做得更好、更安全。
1、在public下边新建文件夹,名称自己随意设定(这里假设名称web)。

图1 tp5 程序都放到了public文件夹内

图2 tp6程序到了public内
如图,感觉整洁了不少
1)根目录下入口文件index.php
tp5入口文件
<?phpdefine(APP_PATH,__DIR__./public/web/application/);define(ROOT_PATH,realpath(__DIR__)."/");// 加载框架引导文件require __DIR__ . /public/web/thinkphp/start.php; ?>
说明:
APP_PATH,和require的路径都加上了/public/web
tp6入口文件
namespace think;require __DIR__ . /public/web/vendor/autoload.php;// 执行HTTP应用并响应$http = (new App())->http;$response = $http->name(index)->run();$response->send();$http->end($response);
2)入口文件对应iis重写规则
<rule name="main" stopProcessing="true"><match url="^(.*)$" ignoreCase="false" /><conditions logicalGrouping="MatchAll"><add input="{HTTP_HOST}" pattern="^(.*)$" /><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /></conditions><action type="Rewrite" url="/public/web/index.php/{R:1}" /></rule>
说明:
3)根目录下index.php只是作为网站的首页访问
这个时候文件内容是什么,没有任何区别,可以是空白,反正填写任何内容都不会显示出来。
4)根目录下index.php 对应url重写规则
<rule name="main" stopProcessing="true"><match url="^((?!public).*)$" ignoreCase="false" /><action type="Rewrite" url="/public/web/index.php/{R:1}" /></rule>
说明:
作用是排除掉public文件夹全部重写,public/web/文件夹下要有入口文件。
5)网站根目录下有的时候生成sitemap.xml
如果这个时候使用的是第4步的重写规则,直接访问http://www.abc.com:8080/sitemap.xml,是被重写的,需要我们在规则内排除一下sitemap
<rule name="main" stopProcessing="true"><match url="^((?!(public|sitemap)).*)$" ignoreCase="false" /><action type="Rewrite" url="/public/web/index.php/{R:1}" /></rule>
2、文件夹关闭目录浏览
3、图片上传
如果使用的是tp自带的上传,可能这些都有判断,我是用的以前的,安全性靠自己去提高。
1)图片改了扩展名上传
上传以后进行判断,getimagesize("E:\phpweb\about.jpg");可以返回图片的宽度,高度,mime类型,图片的mime类型有image/gif,image/jpeg,image/png其他的,比如:bmp图片,几乎用不到可以不考虑。通过判断类型是否这3个里边的,得出结论是否是图片,如果不是,unlink()删除该图片;
$pic="E:\phpweb\about.jpg";$picinfo=getimagesize($pic);$mimearr=array(image/gif,image/jpeg,image/png);$mime=$picinfo[mime]??;if(!in_array($mime,$mimearr)){@unlink($pic);echo JSON_encode(array(error=>0001,msg=>"可疑文件,禁止上传"),JSON_UNESCAPED_UNICODE);exit;}
2)图片文件包含了木马
if (file_exists($tmp_name)) {$resource = fopen($tmp_name, rb);fseek($resource, "0");$fileSize = filesize($tmp_name); if ($fileSize > 512) { // 若文件大于521B文件取头和尾$hexCode = bin2hex(fread($resource, "512"));fseek($resource,$fileSize-512);$hexCode .= bin2hex(fread($resource, 512)); }else{ // 取全部 $hexCode = bin2hex(fread($resource, $fileSize)); }if (preg_match("/(3c25.*?28.*?29.*?253e)|(3c3f.*?28.*?29.*?3f3e)|(3C534352495054)|(2F5343524950543E)|(3C736372697074)|(2F7363726970743E)/is", $hexCode)){$status = 5;}else{$status = 0; }}
说明:
$status安全码,返回0正常,5包含了可疑代码;
4、富文本编辑器默认所在文件夹
有的编辑器,集成了很多功能,直接处理上传,上传的图片,也会在编辑器的文件夹内,
5、管理员登陆密码错误次数限制
6、登陆错误提示
我们习惯的账号密码,别人猜起来就会容易。
7、过滤危险字符防止sql注入
URL参数、文章搜索、留言板,我使用的是360提供的防sql注入类(Webscan)。
IndexController.php
class IndexController extends CmController {}
CmController.php
use checkdanger\Webscan;class CmController extends BaseController { public function __construct(){ header("Content-Type:text/html; charset=utf-8"); $webscan = new Webscan(); if ($webscan->check()) { echo 系统检测到有攻击行为存在!; exit; } }
说明:
所有的页面先继承了CmController.php,CmController.php继承BaseController,构造函数内进行判断包含危险性字符,登陆过期等等。
8、不要显示详细错误信息
上一篇:王子蛋糕加盟
下一篇:如何注册qq号 怎样注册qq号
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图