漏洞描述:
redis 默认不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露。
修复方案:
1、绑定需要访问数据库的IP
修改 redis.conf 中的 “bind 127.0.0.1” ,改成需要访问此数据库的IP地址。
2、设置访问密码
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码。
注:上述两种方法修改后,需要重启redis才能生效。
漏洞描述:
redis 默认不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露。
修复方案:
1、绑定需要访问数据库的IP
修改 redis.conf 中的 “bind 127.0.0.1” ,改成需要访问此数据库的IP地址。
2、设置访问密码
在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码。
注:上述两种方法修改后,需要重启redis才能生效。
首先介绍下Ctags:
官方解释:产生标记文件以帮助在源文件中定位对象。
其生成的标记文件tags中包括这些对象的列表:
如何在Sublime Text3中使用Ctags呢?
如何生成.tags文件?
程序和插件都有了,那么我们现在需要生成.tags文件,
Sublime Text3的插件Ctags读取的是当前源程序目录下的.tags文件,
生成.tags文件的命令如下:
ctags -R -f .tags –languages=C –langmap=c:+.ccs
在源程序的根目录下使用该命令:
生成完毕重启Sublime Text3打开程序文件,找到一个方法定义按Ctrl + T试试吧。只是跳转移动之前不会有函数参数提示的。
团体协作开发时,编码规范和标准极其重要。除了借助 IDE 等工具完成一部分外,起码的规范都应该了解清楚,重温一下 fig 组织制定的 PSR-{0,1,2,3} 吧。
具体地址:https://github.com/php-fig/fig-standards/tree/master/accepted
如需中文版(繁体)参见:
PSR-1:http://blog.mosil.biz/2012/08/psr-1-basic-coding-standard/
PSR-2:http://blog.mosil.biz/2012/09/psr-2-basic-coding-standard/
您还有补充吗?
使用面向对象思想进行开发有以下优点:
1、易维护
采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。
2、质量高
在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
3、效率高
在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。使用这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
4、易扩展
由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
面向对象设计的原则
SRP 单一职责原则
就一个类而言,应该仅有一个引起它变化的原因。
OCP 开放————封闭原则
软件实体(类、模块、函数等)应该是可以开展的,但是不可修改。
LSP Liskov 替换原则
子类型必须能够替换掉它们的父类型。
DIP 依赖倒置原则
抽象不应该依赖于细节。细节应该依赖于抽象。
ISP 接口隔离原则
不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
REP 重用发布等价原则
重用的粒度就是发布的粒度
CCP 共同封闭原则
包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
CRP 共同重用原则
一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
ADP 无环依赖原则
在包的依赖关系图中不允许存在环。
SDP 稳定依赖原则
朝着稳定的方向进行依赖
SAP 稳定抽象原则
包的抽象程度应该和其稳定程度一致。
修改MySQL配置文件my.cnf(通常位于/etc/mysql/my.cnf)或mysql.ini 下加入如下字段
对于MySQL 5.5而言:
default-storage-engine=MyISAM
loose-skip-innodb
innodb=OFF
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
对于MySQL 5.6而言:
default-storage-engine=MyISAM
default-tmp-storage-engine=MYISAM
loose-skip-innodb
loose-innodb-trx=0
loose-innodb-locks=0
loose-innodb-lock-waits=0
loose-innodb-cmp=0
loose-innodb-cmp-per-index=0
loose-innodb-cmp-per-index-reset=0
loose-innodb-cmp-reset=0
loose-innodb-cmpmem=0
loose-innodb-cmpmem-reset=0
loose-innodb-buffer-page=0
loose-innodb-buffer-page-lru=0
loose-innodb-buffer-pool-stats=0
loose-innodb-metrics=0
loose-innodb-ft-default-stopword=0
loose-innodb-ft-inserted=0
loose-innodb-ft-deleted=0
loose-innodb-ft-being-deleted=0
loose-innodb-ft-config=0
loose-innodb-ft-index-cache=0
loose-innodb-ft-index-table=0
loose-innodb-sys-tables=0
loose-innodb-sys-tablestats=0
loose-innodb-sys-indexes=0
loose-innodb-sys-columns=0
loose-innodb-sys-fields=0
loose-innodb-sys-foreign=0
loose-innodb-sys-foreign-cols=0
重启后登录mysql执行:show engines命令查看结果
配置文件中:
bin log的相关参数
#log_bin=On/mysql-bin
#expire_logs_days = 10
#max_binlog_size = 100M
log_bin开启或指定日志名
Expire_logs_days :定义了mysql清除过期日志的时间。
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
max_binlog_size
如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。
relay log的相关参数
通过语句:show variables like ‘%relay%’,查看先骨干的relay的所有相关参数
mysql> show variables like ‘%relay%’;
+———————–+—————-+
| Variable_name | Value |
+———————–+—————-+
| max_relay_log_size | 0 |
| relay_log | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
| sync_relay_log | 0 |
| sync_relay_log_info | 0 |
+———————–+—————-+
9 rows in set (0.08 sec)
2.1 max_relay_log_size:标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;
2.2 relay_log:定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory);
2.3 relay_log_index:同relay_log,定义relay_log的位置和名称;
2.4 relay_log_info_file:设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置)
2.5 relay_log_purge:是否自动清空不再需要中继日志时。默认值为1(启用)。
2.6 relay_log_recovery:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
2.7 relay_log_space_limit:防止中继日志写满磁盘,这里设置中继日志最大限额。但此设置存在主库崩溃,从库中继日志不全的情况,不到万不得已,不推荐使用;
2.8 sync_relay_log:这个参数和sync_binlog是一样的,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay log中继日志里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入中继日志里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。
2.9 sync_relay_log_info:这个参数和sync_relay_log参数一样,当设置为1时,slave的I/O线程每次接收到master发送过来的binlog日志都要写入系统缓冲区,然后刷入relay-log.info里,这样是最安全的,因为在崩溃的时候,你最多会丢失一个事务,但会造成磁盘的大量I/O。当设置为0时,并不是马上就刷入relay-log.info里,而是由操作系统决定何时来写入,虽然安全性降低了,但减少了大量的磁盘I/O操作。这个值默认是0,可动态修改,建议采用默认值。
3、总结:以上只是简单的介绍了每个参数的作用,这些参数具体的设置还是需要根据每个用户的实际系统情况进行设置的;
PHPCMS V9 在网址设置中关闭水印功能后,编辑框上的附件上传打开默认依旧是添加水印的,修改很简单如下红色部分即可。
打开文件\phpcms\modules\attachment\functions\global.func.php
/**
* 读取swfupload配置类型
* @param array $args flash上传配置信息
*/
function getswfinit($args) {
$siteid = get_siteid();
$site_setting = get_site_setting($siteid);
$site_allowext = $site_setting[‘upload_allowext’];
$args = explode(‘,’,$args);
$arr[‘file_upload_limit’] = intval($args[0]) ? intval($args[0]) : ‘8’;
$args[‘1’] = ($args[1]!=”) ? $args[1] : $site_allowext;
$arr_allowext = explode(‘|’, $args[1]);
foreach($arr_allowext as $k=>$v) {
$v = ‘*.’.$v;
$array[$k] = $v;
}
$upload_allowext = implode(‘;’, $array);
$arr[‘file_types’] = $upload_allowext;
$arr[‘file_types_post’] = $args[1];
$arr[‘allowupload’] = intval($args[2]);
$arr[‘thumb_width’] = intval($args[3]);
$arr[‘thumb_height’] = intval($args[4]);
$arr[‘watermark_enable’] = ($args[5]==”) ? $site_setting[‘watermark_enable’] : intval($args[5]);
return $arr;
}
MySQL主从复制几个重要的启动选项
(1) log-slave-updates
log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作
(2) master-connect-retry
master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒
(3) read-only
read-only是用来限制普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作
(4) slave-skip-errors
在复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。
Slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。
–slave-skip-errors=[err1,err2,…….|ALL]
但必须注意的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在应用中需要根据实际情况,如果对数据完整性要求不是很严格,那么这个选项确实可以减轻维护的成本
replicate-ignore-db = mysql,test,information_schema //忽略同步的库
replicate-wild-do-table = demo.% //指定同步的表
replicate-rewrite-db=”olddb->newdb” 这个就很实用了 和可以 同步到不同名称数据库上 配合以上指定同步不同的表