你PHP写的网站安全吗?如何做到更安全?

2022-10-11 21:22:49 120 0
魁首哥

A Story

2016年的某一天,一位企业主突然想到了一个绝佳的思路和理念来占领和扩宽市场,但在这个时代,没点互联网思维都不好意思开公司啊,所以必须得先独立开发一个Web应用出来。

最终,CEO决定,雇佣一位PHP程序员来构建公司网站。

而你,就是一位PHP开发者,并且这家公司恰巧雇佣了你。

你坐在自己的工位,翻阅着项目规划,思考着如何构建代码,这时候电脑上一个弹窗吸引了你。

“某公司网站被黑,所有客户数据都被盗取”。

你回过头来继续看着项目规划,突然想到如果自己的代码中出现了这些安全问题,那该怎么办呢?不由得出了一身冷汗。

那,如何才能提高PHP应用的安全性呢?

你可能以为本文要讲各种漏洞及其防御方法了,不不不。

今天,我们不聊漏洞。

理解安全的本质

安全不是某个产品,也不是某个威胁清单,更不是某种绝对的保障。

安全是一个过程,更是面对风险时的成熟心态。

想做到绝对的安全是不可能的,但另一方面,攻击者同样需要考虑成本问题,如果你将攻击该系统的成本提高到攻击者没有兴趣去攻击,或者不愿意去攻击,那么我们的目的也就达到了。

但一般来说,提高攻击者攻击系统的成本,意味着降低用户的使用体验和系统的可用性。

所以,更完美的情况是,我们既做到提高攻击者攻击成本,又对系统本身的体验度没有影响。

前文说了,我们今天不提漏洞,那就只从4个比较冷门的角度说说如何提高php应用安全性吧。

1.使用php 7进行开发

php 7中有三个比较重大的改动,对于提高应用安全性有很大帮助。

①.移除了旧版本中对于mysql_*函数的支持,因为这一函数在许多情况下是不安全的。

②.允许在代码中增加标量类型说明。

③.使用了更安全的随机数生成器

针对前两条,我们给出一个例子:

上面的代码看起来挺安全的,因为我们对$name参数进行了过滤。

坦白地说,它确实不存在安全问题。

但是,如果开发者在后续的代码中,向$start和$end中也传了参数,却忘了添加过滤,那就会变得不安全了。(虽然这样的失误看起来很低级,但的确存在这样的案例)

不过,在php 7中就不会出现这样的问题,即使开发者偶尔打个小差,也不会导致过于严重的问题。

是不是php 7中的处理方式比php 5中更安全一些呢?如果开发者向第二个或第三个参数中传了值,将会throw出一个”类型错误”的提示,如果没有catch这个错误,脚本将会停止运行,从而避免了安全漏洞的产生。

而且目前还没有纯粹的整型输入能导致sql注入的情况出现,所以上面的代码是很安全的。

不过,最好还是不要使用拼接字符串的形式来执行SQL查询。

MySQLi和PDO扩展都支持预处理语句,但老的Mysql扩展并不支持。

总之,php 7是php语言的一个重要转折点,使用php 7可以更容易写出安全的代码。

2.全局使用HTTPS

如果网站能够全局部署HTTPS,那么就不用再担心session劫持攻击了。

并且使用Let’s Encrypt和Caddy等一些开源项目部署HTTPS是十分容易的,

虽然HTTPS在网络通信中增加了一层认证来加密你的通信,但是它占用的CPU和内存几乎是可以忽略不计的,并且在使用HTTP/2的情况下,HTTPS的通信速度要快于HTTP。

并且,使用正确的HTTPS证书,会有利于提高搜索引擎排名。

3.使用安全的headers

如何判断你的网站的headers是否安全呢?

安全专家搭建了一个网站(securityheaders.io),可以快速监测你的网站是否开启并正确设置了安全配置。

当然了,有些headers并不是必须要加,例如X-Frame-Options,如果你的网站确实需要用到frame框架,那你就可以不加这个headers。

有些开源程序可以辅助你更容易地完成对headers的设置,例如CSP Builder(作者将其公布在了Github上)。

不过还是强烈建议,你应该加上下面这些headers

4.使用可靠的参考资料和书籍

你可能会认为最后一点有些难以理解和牵强,其实,这一点是非常重要的。

为什么单独提出这点呢?因为市面上php的书籍非常繁杂,而且质量也参差不齐。

许多的书籍中并没有涉及到安全开发方面的知识,如果开发者阅读这方面书籍过程中受到了误导,那么开发出来的程序肯定也会存在一些安全问题。

尽管使用php 7对提高程序安全性有一定作用,但是开发者具备基本的安全素质还是很有必要的。

如果你做到了以上四点,那么程序安全性一定会有很大的提高,并且在面对黑客攻击和处理威胁的过程中,你也会从容许多。

动动手指,更多精彩内容,请关注微信公众号:301在路上

商务合作请联系微信号:2036234(备注:姓名+单位)

收藏
分享
海报
0 条评论
120
上一篇:PHP高级工程师面试题 下一篇:php_curl请求ftp下载图片

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码