Redis 未授权访问漏洞

漏洞描述:

redis 默认不需要密码即可访问,黑客直接访问即可获取数据库中所有信息,造成严重的信息泄露。

修复方案:

1、绑定需要访问数据库的IP

修改 redis.conf 中的 “bind 127.0.0.1” ,改成需要访问此数据库的IP地址。

2、设置访问密码

在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码。

注:上述两种方法修改后,需要重启redis才能生效。

发表在 数据库 | 标签为 | 留下评论

filezilla给不同路径的目录设置一个相同用户

场景:

服务器上d:webs\下面有a、b、c 五个目录,需要设置1个ftp账号x,把a、b、c分给x。

做法:

1) D:www\ 下面先建1个空文件夹virtualX

2) filezilla中新建一个x账户,把virtualX、a、b、c四个目录全部添加进去给他,并设置virtualX为主目录(home),然后分别右键点击a、b、c,在弹出的窗口中选择“Edit aliases”按钮,即编辑别名,在弹出的框中分别输入d:www\virtualX\a,d:www\virtualX\b,d:www\virtualX\c。

3) 客户端X用户链接后远程目录显示a、b、c三个。

发表在 服务器 | 标签为 , | 留下评论

Sublime Text3下载安装Ctags插件

首先介绍下Ctags:

官方解释:产生标记文件以帮助在源文件中定位对象。

其生成的标记文件tags中包括这些对象的列表:

  1. 用#define定义的宏
  2. 枚举型变量的值
  3. 函数的定义、原型和声明
  4. 名字空间(namespace)
  5. 类型定义(typedefs)
  6. 变量(包括定义和声明)
  7. 类(class)、结构(struct)、枚举类型(enum)和联合(union)
  8. 类、结构和联合中成员变量或函数

如何在Sublime Text3中使用Ctags呢?

  1. 官方下载Ctags,目前版本为5.8,下载地址:http://sourceforge.net/projects/ctags/
  2. 把下载Windows版本的Ctags放在系统目录下:C:\Windows\System32,
  3. 在Sublime Text3中安装Ctags插件
  • Shift + Ctrl + P调出 Package Control 命令面板;
  • 输入pci;
  • 查找Ctags,安装。

如何生成.tags文件?

程序和插件都有了,那么我们现在需要生成.tags文件,

Sublime Text3的插件Ctags读取的是当前源程序目录下的.tags文件,

生成.tags文件的命令如下:

ctags -R -f .tags –languages=C –langmap=c:+.ccs

  • “-R”表示递归创建,也就包括源代码根目录(当前目录)下的所有子目录。
  • “-f”将索引写入指定文件。
  • “.tags”生成的文件名。
  • “–languages=C”选择语言解释器
  • “–langmap=c:+.ccs”表示把后缀名为.ccs的文件按照C语言解析(即视.ccs文件为.c文件)。

在源程序的根目录下使用该命令:

  • WIN + R输入cmd调出命令行;
  • 进入对应项目目录,输入命令生成.tags文件,如果程序多,需要等待几秒。
  • ctags -R -f .tags

生成完毕重启Sublime Text3打开程序文件,找到一个方法定义按Ctrl + T试试吧。只是跳转移动之前不会有函数参数提示的。

发表在 软件 | 标签为 , | 留下评论

重温PHP 编码规范:PSR-0,PSR-1,PSR-2,PSR-3

团体协作开发时,编码规范和标准极其重要。除了借助 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 稳定抽象原则
包的抽象程度应该和其稳定程度一致。

发表在 开源代码 | 留下评论

windows server 2008 IIS7.5 FTP 出现 “530 Valid Hostname is expected”

原来windows server 2008添加过ftp用户没问题,可是今天在重新再IIS7.5上加了一个FTP站点,创建完ftp用户后,用这个用户在远程登录发现
出现 “530 Valid Hostname is expected”,搞了半天原来第一个是没有绑定域名,第二个以上ftp用户其实都应该绑定域名。
解决办法:
1.若是你的ftp绑定的域名是ftp.xxx.com,用户名为name
则登录时需要用 ftp.xxx.com|name;
注意中间用”|”分隔
2.把绑定删除,直接用用户名登录也可以,但是只能针对只有一个ftp用户的时候才有用。
发表在 服务器 | 标签为 , | 留下评论

MySQL关闭禁用InnoDB引擎的方法

修改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命令查看结果

 

发表在 服务器 | 标签为 , | 留下评论

mysql日志文件binlog和relaylog几个参数

配置文件中:

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、总结:以上只是简单的介绍了每个参数的作用,这些参数具体的设置还是需要根据每个用户的实际系统情况进行设置的;

发表在 数据库 | 标签为 , | 留下评论

V9设置关闭水印后编辑框附件上传默认值不一致

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主从同步复制几个启动重要参数

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” 这个就很实用了 和可以 同步到不同名称数据库上 配合以上指定同步不同的表

发表在 数据库 | 标签为 , | 留下评论