php需要学哪些东西呢?下面让我们一起了解一下!
首先学习PHP基本语法(学习hello,world、嵌入方法、常量与变量的学习、基本的运算符号的学习等);之后熟悉Mysql、Web服务器Apache/Nginx、Linux和HTTP协议;再学习基本的HTML代码;最后学习常规使用的PHP框架(ThinkPHP、Zendframework、Yii、Yaf等)。
PHP需要学习的东西比较多,初学者可在网站上寻找相关视频进行自学,也可选择培训班进行系统的学习。
拓展:php工程师是什么
php工程师是对使用php语言进行web应用系统开发的人的统称,主要分为php初级工程师、php中级工程师和php高级工程师三个等级。PHP工程师能够熟练使用各种 PHP 函数和框架函数或对象进行系统业务逻辑开发,与前端对接等工作。
今天的分享就是这些了,希望能对你们有帮助哟!
php手把手教你做网站(三十二)网站开发安全性注意事项
我所说的可能很多人都知道,掌握得也比较片面,只是平时的一些积累,希望能给初学者一些帮助吧。
如果有没有考虑到的,欢迎留下您的想法,让我们一起把网站做得更好、更安全。
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、不要显示详细错误信息