19年春节去河洛和开封走了走,穿梭在这片曾经为多朝都城的地方,不仅感概历史不再是教科书上简洁的文字,不再是史书上丰富的故事,历史是脚下实实在在的土地,历史是曾经缓慢流过这里的一段段时光。
继续阅读
月度归档:2019年03月
快速了解Composer
PHP依赖管理工具Composer早有耳闻,但是一直没有了解过。最近研究定时任务调度,发现Laravel框架自带定时任务管理功能,处于好奇就想去看看。
之前完全没有接触学习过Laravel, 按照习惯,先下载安装让框架代码跑起来。打开文档发现需要用Composer安装,那就先了解下Composer呗。进入Composer官网发现又是一堆文档,目测10分钟是看不完了。
我的目标是快速安装好Laravel,一边调试一边看任务调度的逻辑,结果第一步就被拖住了,我多么希望有一个简单的极致的说明和用法介绍,于是稍微花费了一些功夫有了下面的整理,希望10分钟内你就能明白。
继续阅读
MySQL唯一索引添加和用法
一、唯一索引添加与变更
0、建表加唯一索引ukey_o_d_t,使用关键字unique key(如果只是单列唯一索引,可以在字段后加unique, 如topic):
CREATE TABLE `tv_episode_checkin_summary_log` ( `id` int(11) unsigned NOT NULL auto_increment COMMENT '自增ID', `oid` varchar(128) NOT NULL default '0' COMMENT '选项ID', `topic` varchar(256) NOT NULL default '' unique COMMENT '话题词', `num` int(11) unsigned NOT NULL default '0' COMMENT '数量', `type` varchar(2) NOT NULL default '' COMMENT '类型: 1、小时数;2、天数', `dtime` bigint(11) unsigned NOT NULL default '0' COMMENT '数据汇总时间', `ctime` bigint(11) unsigned NOT NULL default '0' COMMENT '创建时间', `mtime` bigint(11) unsigned NOT NULL default '0' COMMENT '修改时间', `ext` varchar(64) NOT NULL default '' COMMENT '扩展字段', PRIMARY KEY (`id`), UNIQUE KEY `ukey_o_d_t` (`oid`,`dtime`,`type`), KEY `key_t_d_t` (`topic`(255),`dtime`,`type`), KEY `key_o_d_t` (`oid`,`dtime`,`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='打卡汇总数据表'
CSRF跨站请求伪造
上篇文章总结了遇到过的一个XSS漏洞问题,这次顺便写写自己了解的CSRF。
一、简介
CSRF是Cross-site request forgery的缩写,中文的世界一般说法是跨站请求伪造。简单地说,就是黑客伪造了一个目标网站的地址,欺骗用户去点击用浏览器打开这个地址,如果用户登陆了这个网站,就可以绕过后台用户身份验证,执行一些操作。
继续阅读
微博投票XSS漏洞
0、案例描述
收到了公司安全组发来的一个反射型XSS漏洞提醒,修复建议:请在参数值输出点做过滤或者编码转换,
链接如下:
http://vote.weibo.com/widget?vid=2977008&skin=&isCustom=1&height=448zdxxn"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%3Ealert(1)%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />yptrj
点开后确实呈现了一个弹窗,查看了接收参数和展示参数的地方, 直接展示了接收到的参数。
// controller $r = $this->getRequest(); $wiget_width = $r->getQuery('width', 600); $wiget_height = $r->getQuery('height', 600); // view <div style="height: <?=$wiget_height?>;px" >;
快速做了一个类型转换,上线修复了问题
$wiget_width = intval($r->getQuery('width', 600)); $wiget_height = intval($r->getQuery('height', 600));
技术和业务
工作第一年跟公司的老大(架构师)在楼道闲聊,有句话在之后几年的工作中时不时的会想起,老大说:技术是一条腿,业务是另一条腿,只有两条腿才能走路。当时听后觉得好有道理,技术要去实现业务才有价值。
之后在新的工作中,面对新的业务,发现依旧有些东西是不变的,比如技术和业务的关系,相互依赖,又相互牵制。尤其是以PHP为核心技术的RD,PHP生来就是快速实现业务的利剑,实现纯业务的场景占大多数。而在实现业务的过程中,有经验的RD都不会重新发明轮子,基于现有的存量(扩展、框架、库、算法等,有些是业界开源内容,有些是公司已积累的技术)叠加增量,这些增量也就是纯业务逻辑。在实现业务逻辑的过程中,由于林林总总的原因,排期总是很紧,也就无法他顾,深入去看看哪些存量的实现原理,还是在技术外围观光。
继续阅读
笑傲江湖
第一次听说笑傲江湖还是上小学的时候,印象特别深刻,有一天上午下了第一节课令狐冲的名字在同学中传来传去。不知道为什么回家也没有去看,后来转学去了很遥远的地方,那里没有江湖…
继续阅读
PHP-FPM占用CPU过高分析及OPcache解决
平时站点CPU使用率都在10%以内,最近发现达到了50%左右
top查看服务器资源使用情况:
%Cpu0 : 41.9 us, 1.3 sy, 0.0 ni, 56.1 id, 0.3 wa, 0.0 hi, 0.3 si, 0.0 st KiB Mem : 1016164 total, 68120 free, 583512 used, 364532 buff/cache KiB Swap: 0 total, 0 free, 0 used. 251176 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5705 www 20 0 281272 40360 4516 S 15.0 4.0 0:09.09 php-fpm 5704 www 20 0 281292 40604 4584 S 8.0 4.0 0:08.89 php-fpm 5706 www 20 0 281124 41124 5296 S 8.0 4.0 0:08.80 php-fpm 5707 www 20 0 281328 40596 4580 S 7.7 4.0 0:08.77 php-fpm