跳转至

所有文章

PHP项目中安全风险与防范

在PHP开发中,由于编码bug或者配置不正确,如果被恶意利用往往会导致严重安全问题。根据OWASP Top 10 2017里面的10大安全风险,现归纳总结了PHP项目中几种常见安全风险,攻击场景和防范措施。

1. 注入-Injection

  • 一般指不受信任的数据被伪装成命令或者查询语句的一部分,发送至解析器后发生了执行的过程。
  • 攻击者的恶意数据能够欺骗解释器在未被授权的情况下执行非预期代码或者访问数据。
  • 常见注入类型有SQL、NoSQL、OS命令、XML等注入

案例场景

例1. 用户输入的数据直接用于SQL查询语句中

$sql = 'select * from news where id="' . $_GET['id']  . '"'
攻击方式:
http://example.com/news?id=" or 1='1

十种常见软件架构模式

原文地址:10 Common Software Architectural Patterns in a nutshell

是否曾经好奇过大型企业系统是如何设计的?在主要软件开发之前,我们需要选择合适的架构,为我们提供所需的功能和质量属性。因为,在我们应用架构到我们的设计中之前,我们应该了解不同的架构

Software Architectural Patterns

什么是架构模式?

架构模式是对给定上下文中软件架构中常见问题的通用、可重用的解决方案。架构模式类似于软件设计模式,但范围更广。

PHP错误与异常处理详解(一)

在PHP开发过程中,错误和异常的处理是必不可少的,但由于两者比较相似,容易让人混淆。错误往往是自身问题,比如语法错误,使用未定的变量等,而异常是在程序运行过程中存在逻辑问题时候主动抛出的。

如何在Docker上构建符合12要素的微服务

原文地址:How to Build 12 Factor Microservices on Docker

原文由两部分构成,我和并处理了,并去掉原先两部分中间过渡的引语。文章有删减处理,有些地方确实拿捏不准,翻译可能南辕北辙,望见谅。最后感谢Google 翻译,完成了90%的翻译

随着企业持续从云计算上获得节约成本的好处,Devops团队正逐渐把他们的基础架构迁移到自服务平台。如何将应用设计成云原生和反脆弱成了至关重要的工作。在接下里的一系列文章里面,我们将研究用于应用设计的12要素方法论,以及怎样设计接口来和大部分流行的Pass提供者交互,以及演示怎么在Deis PaaS上运行一个微服务

NetfixHeroku等创新者的引领下,面向服务架构的数据中心正意识到在云上采用微服务的巨大潜力。Netfix是无可争议的第一个设计出可伸缩和反脆弱的应用,也就是有意引入chaos到他们的系统,他们的应用在面对错误时候变得更加稳定、弹性、优雅。同样通过帮助成千上万的客户在云上构建应用,Heroku提出一系列通用原则并将它描述成12要素方法论

几种找到php.ini文件的方法

查找php.ini文件所在路径几种方法:

1. 内置函数

phpinfo

phpinfo输出PHP当前状态的大量信息,包含了编译选项、启用的扩展、PHP 版本、服务器信息和环境变量(如果编译为一个模块的话)、PHP环境变量、操作系统版本信息、path 变量、配置选项的本地值和主值、HTTP 头和PHP授权信息(License)。包含所有 EGPCS(Environment, GET, POST, Cookie, Server) 数据

JS实现继承的几种方式

JS无法像其他高级语言那样通过extend直接实现继承。只通过一定方式来实现继承机制。常见的几种实现继承的方式有: 1. 对象冒充 2. call/apply方法 3. 原型链(prototype chain) 4. 混合方式(call/apply+prototype chain)

Debounce vs Throttle

DebounceThrottle是javascript中两种手段来控制函数的执行,特别是事件的处理。

当处理scroll,resize, keyup等事件时候,由于每秒触发的时间频次太多,不断的通过绑定回调函数来处理,会对浏览器造成巨大压力。这时候Debounce和Throttle就派上用场了。

Debounce

debounce强制函数某段时间只会执行一次,会把大量事件聚合在一次执行,哪怕它本来会被调用多次。

而throttle好比每隔15分钟一趟的电梯,过点不侯,debounce也每隔15分钟一趟,但当它看见有人要进来时候,它会允许进来,并从进来那一刻算起在等15分钟,如果15分钟内没有人进来了,就会开走。

数说2017

{% iframe //export.cyub.vip/i?all=%7B%22chart%22%3A%7B%22type%22%3A%22bar%22%7D%2C%22title%22%3A%7B%22text%22%3A%22GitHub%202017%E5%B9%B4%E5%BA%A6%E6%9C%80%E5%8F%97%E6%AC%A2%E8%BF%8E%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80%E6%8E%92%E8%A1%8C%22%7D%2C%22subtitle%22%3A%7B%22text%22%3A%22%E6%95%B0%E6%8D%AE%E6%9D%A5%E6%BA%90%3A%20https%3A%2F%2Foctoverse.github.com%22%7D%2C%22xAxis%22%3A%7B%22categories%22%3A%5B%22JAVASCRIPT%22%2C%22PYTHON%22%2C%22JAVA%22%2C%22RUBY%22%2C%22PHP%22%2C%22C%2B%2B%22%2C%22CSS%22%2C%22C%23%22%2C%22GO%22%2C%22TYPESCRIPT%22%2C%22SHELL%22%2C%22SWIFT%22%2C%22SCALA%22%2C%22OBJECTIVEC%22%5D%2C%22title%22%3A%7B%22text%22%3Anull%7D%7D%2C%22yAxis%22%3A%7B%22title%22%3A%7B%22text%22%3A%22Pull%20Request%E6%AC%A1%E6%95%B0%22%7D%7D%2C%22tooltip%22%3A%7B%22enabled%22%3Atrue%2C%22pointFormatter%22%3A%22__fn__%20()%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20var%20val%20%3D%20this.y%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20if%20(val%2F1000000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20val%2F1000000%20%2B%20'M'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if(val%2F1000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20val%20%3D%20val%2F1000%20%2B%20'K'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20return%20'%3Cspan%20style%3D%5C%22color%3A%20'%2B%20this.series.color%20%2B%20'%5C%22%3E%5C%5Cu25CF%3C%2Fspan%3EPull%20Request%3A%20%3Cspan%20style%3D%5C%22color%3A%23f69744%5C%22%3E'%2B%20val%20%2B'%3C%2Fspan%3E'%5Cn%7D%22%7D%2C%22plotOptions%22%3A%7B%22bar%22%3A%7B%22dataLabels%22%3A%7B%22enabled%22%3Atrue%2C%22formatter%22%3A%22__fn__%20()%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(this.y%20%2F%201000000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%2F1000000%20%2B%20'M'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20if%20(this.y%20%2F%201000%20%3E%3D%201)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%2F1000%20%2B%20'K'%3B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%20else%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%20this.y%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%22%7D%2C%22colorByPoint%22%3Atrue%7D%7D%2C%22credits%22%3A%7B%22enabled%22%3Afalse%7D%2C%22legend%22%3A%7B%22enabled%22%3Afalse%7D%2C%22series%22%3A%5B%7B%22data%22%3A%5B2300000%2C1000000%2C986000%2C870000%2C559000%2C413000%2C335000%2C285000%2C235000%2C207000%2C206000%2C107000%2C99000%2C66000%5D%7D%5D%7D&width=620&height=500 620 500 %}

长连接,RPC,RESTful乱弹

今天学习到很多知识,混混沌沌的大脑有时候就得需要轻敲一下,才能醍醐灌顶。

之前的对技术思考深度不够,涉及到东西浮于表面,蜻蜓点水而过。对于注意到不寻常现象,往往没有分析它的本质,思考现象本身原因就放过了。比如今天学习到RPC和Restful一个区别是RPC支持长连接,这对我之前对RPC的了解停留在客户端调用是无感知,无差别更深入本质了。

长连接

长连接(HTTP persistent connection)指的是在一个连接上可以持续不断的发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需 要双方发检测包以维持此连接。

keep-alive机制出现之前,每次http请求都会打开一个tcp socket连接,请求完成之后就断开这个tcp连接。keep-alive机制,能够保持TCP连接不断开(不发RST包、不四次握手),减少了tcp连接次数,提交了传输速率。但是长时间不释放tcp连接数,也会极大的造成资源浪费。实现成千上万人同时在线的话,也就得保持住同样数量的tcp连接数。keep-alive的timeout时间设置非常重要,能够及时的释放不需要的tcp连接。