当前位置:首页 > 叨叨念念

Bug描述

今天论坛有人说评论有BUG,我看了一下,无意中注意到isLogCanComment函数。

function isLogCanComment($blogId) { if (Option::get('iscomment') == 'n') { return false; } $query = $this->db->query("SELECT allow_remark FROM ".DB_PREFIX."blog WHERE gid=$blogId"); $show_remark = $this->db->fetch_array($query); if ($show_remark['allow_remark'] == 'n' || $show_remark === false) { return false; }else { return true; } }

以上是isLogCanComment函数的代码,数据库(连接方式使用mysqli)查询$show_remark的值应该是空值NULL,所以不能用===false。

注意:数据库连接方式使用mysqli就会出现这个问题

影响就是POST伪造gid,可以把评论发布到不存在或者未审核未发布的文章下,影响应该不大。

Windows10快速启动称为混合启动(HybridBoot),在Windows8操作系统就引入了这个功能:

以往如 Windows 7关机的时候会将用户会话和系统内核会话同时关闭掉,但在Windows 8 开始的操作系统中新增加了一个“混合启动”(Hybrid Boot)新功能,其原理是关机的时候只关闭用户会话,而系统内核会话则转入休眠状态(保存到一个文件中,下次开机时直接从这个文件中写回内存),从而提高系统启动速度,而微软更是把这个“混合启动”功能默认替代了关机功能。


“睡眠”模式

系统会将正在处理的数据保存到内存中,除内存以外的所有设备都停止供电,可以通过鼠标键盘等唤醒电脑,唤醒后的运行状态和睡眠之前一模一样,睡眠期间不可断电,断电的话内存上的所有数据全部丢失,只能重新开机。

Password Hashing函数在 PHP 5.5 时被引入,这边主要讲讲password_hash加密函数、password_verify验证函数以及和md5加密的区别。


password_hash加密

password_hash() 使用足够强度的单向散列算法创建密码的散列(hash)。

password_hash(string $password, mixed $algo, array $options = ?): string|false

有3个参数:密码(必须),哈希算法(必须),选项(选填)

$pwd = '123456'; $hash = password_hash($pwd, PASSWORD_DEFAULT); echo $hash;

输出hash字符串:$2y$10$H7KD.QWJyY68zeKJXTHoW.zH9ZC69zlXALRBtN8BfiKQkk9YolQum

并不是唯一的hash字符串,通过刷新网页,可以输出不同的hash,也就是1个密码会出现不同的hash加密字符串。


password_verify验证

password_verify()验证密码是否和指定的散列值匹配。

password_verify(string $password, string $hash): bool

有2个参数:密码(必须),哈希值(必须)

$pwd = '123456'; $hash = '$2y$10$H7KD.QWJyY68zeKJXTHoW.zH9ZC69zlXALRBtN8BfiKQkk9YolQum'; $result = password_verify($pwd,$hash); var_dump($result); 输出bool(true)


MD5加密

使用《RSA 数据安全公司的 MD5 消息摘要算法》计算 string 的 MD5 散列值,并返回该散列值

md5(string $string, bool $binary = false): string

由于此函数依赖的算法已不足够复杂,不推荐使用此函数对明文密码加密。所以一般使用md5(password+salt)来计算md5值。

$pwd = '123456'; $md5 = md5($pwd); echo $md5;

输出md5字符串:e10adc3949ba59abbe56e057f20f883e

多次刷新网页保持这个字符串不变,由于网上直接加密的可以直接通过字典输出原始密码,导致非常不安全。

$pwd = '123456'; $salt = '77bx'; $md5 = md5($pwd.$salt); echo $md5; 输出md5字符串:caef045fe88f8efa2cf0b85cb91bad4d


加密性能测试

对比md5加密、md5+salt加密、password_hash加密和password_verify验证性能。

本次测试采用虚拟化

CPU:Intel Xeon Gold 6161 2.2GHz 2核4线程

内存:16GB

PHP:7.4

重复计算10次,取平均值得出以下截图结果

结论:

1、不建议使用password_hash和password_verify进行加密和验证,毕竟和md5+salt也有5万倍以上的性能差距。

2、建议使用md5+盐值的方式,毕竟1ms以下的时间对于性能来说影响不大。

3、安全性虽然password_hash比较安全,但是md5+salt的方式也是相对比较安全的。

标准介绍

网线有两种做法,一种是交叉线,一种是平行(直通)线

交叉线的做法是:一头采用568A标准,一头采用568B标准,常用于PC网卡到PC网卡,HUB普通口到HUB普通口

平行(直通)线的做法是:两头同为568A标准或568B标准,常用于PC网卡到HUB普通口,HUB普通口到HUB级联口(当前大部分网线一般都是直通568B的做法,因为现在设备绝大部分可以自适应了)

568A标准: 1、白绿,2、绿,3、白橙,4、蓝,5、白蓝,6、橙,7、白棕,8、棕。

568B标准: 1、白橙,2、橙,3、白绿,4、蓝,5、白蓝,6、绿,7、白棕,8、棕

以前使用Google提供了较为完善的二维码生成接口,调用API接口很简单,但是现在由于访问google出现问题,需要使用其他的方法生成二维码。


PHP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,

官网地址:http://phpqrcode.sourceforge.net


使用方法

下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2。

phpqrcode.php提供了一个关键的png()方法。

讲到MySQL数据库查询这个相信大家多是会的:SELECT column(s)FROM table_name,反正是最最基础的知识!

但是项目中多表查询也是经常用到的,这篇文章主要是讲讲多表查询的,以下说说多种多表查询的情况以及事例。


第一种:使用SELECT子句进行多表查询

SELECT字段名FROM表1,表2…WHERE表1.字段=表2.字段AND其它查询条件

SELECT a.id,a.title,a.content,a.date,b.info,b.comment,b.date FROM table_a AS a,table_b AS b WHERE a.id=b.id

注:在上面的的代码中,以两张表的id字段信息相同作为条件建立两表关联,

在我们的日常开发中,经常会遇到过这样的情景:查看某条记录是否存在,不存在的话创建一条新记录,存在的话更新某些字段。

你会采用怎么样的处理方式呢?

$result = mysql_query('select * from xxx where id = 1'); $row = mysql_fetch_assoc($result); if($row){     mysql_query('update ...'); }else{     mysql_query('insert ...'); }

其实,MySql已经考虑到了这点,提供了insert into … on duplicate key update的语法,该语法在insert的时候,如果insert的数据会引起唯一索引(包括主键索引)的冲突,即这个唯一值重复了,则不会执行insert操作,而执行后面的update操作。

在玩游戏的时候来电话/短信会断网(比如王者荣耀460),开通了Volte不是说可以边游戏边打电话吗?

这边我就说说,为什么玩游戏时来电话会断网呢?又该如何解决呢?


一、WIFI上网:来电/来短信不会导致网络中断

这个除非是WIFI有问题,不然来电话和来短信都不会影响上网,一直会很流畅。


二、上网卡为中国移动,开通VoLTE业务(安卓手机信号栏一般有HD图标,苹果手机无变化):来电/来短信不会导致网络中断