每年,世界上都会发生越来越多的黑客攻击:从信用卡盗窃到在线商店的黑客攻击网站。 您确定您的脚本受到了真正的保护吗? 预期“后端PHP开发人员”课程的开始,我们的同事编写了一篇有趣的有关PHP安全性的出版物...
引言
Facebook和Cambridge Analytica丑闻,2016年美国民主党的信函泄密,2018年Google的数据泄露以及Yahoo Voice于2012年的黑客入侵只是过去几年记录的主要泄密事件的一些例子。
现在,我们可以前所未有地获得全球范围的信息。 如果您没有适当的注意,关于我们自己的信息(包括机密信息)也可能属于公共领域。
您开发的项目类型无关紧要:开放源代码的儿童游戏或完成大型企业的订单。 作为Web开发人员,您的责任是为所有平台提供安全性。 安全是一个非常困难的方面。
PHP语言提供了几种工具和功能,可用于确保应用程序安全性。
3密码安全规则

用户密码对您应该仍然未知。
我仍然记得我作为PHP开发人员的第一步。 我创建的第一个应用程序是一款游戏,在其中我与朋友一起扮演了摩天大楼建造者的角色。 我们每个人每周都可以登录到我们的帐户,购买建筑商,并将我们的团队发送到新的建筑工地。 我创建了基本帐户:我为每个用户添加了用户名和密码,并通过电子邮件将其发送给他们。 仅仅几个月之后,我才意识到这是多么愚蠢。
一般规则是这样的:您不仅应该不知道用户的密码,还应该不能识别它们。 这是一个非常严重的方面,甚至可能引起法律责任。通过反复试验,您仍然可以得出结论,密码不需要以纯文本形式存储,也不需要以易于解密的方式存储。
不要输入密码限制
让我们玩一个游戏。 尝试猜测密码:
**********很难吧? 让我们尝试一下:
P * r *** e ***现在您知道有一个大写字母和几个大写字母。 如果是这样:
P * r *** e911现在,您可以更容易地猜出密码-因为您知道它包含一个大写字母,大写字母和一个数字。
当您对用户施加限制并为其密码设置掩码时,也会发生同样的事情。 如果您的应用程序要求遵循特定的模式,则向入侵者提示它们可以对您使用。
要求一定的最小密码长度是正常的,因为密码长度会影响提取密码的时间。 但是,相反,找出算法和散列的工作方式将更加有用。
顺便说一句,上述谜语的正确答案是
“ Porsche911” :)
切勿以最纯粹的形式通过电子邮件发送密码
作为Web开发人员,我的第一个错误是我没有提前学习如何管理密码。
假设您是一位客户,并且雇用了一名开发人员来为您的企业创建一个不错的电子商务网站。 该开发人员已向您发送了一封电子邮件,其中包含您网站的密码。 现在,您对员工有了三件事:
- 他知道您的密码。
- 它以最纯粹的形式存储您的密码,而无需使用任何加密。
- 通过Internet发送密码时,他丝毫不担心。
作为回应,别无选择,只能解雇这种雇员。
Web开发人员应该做的是:- 在您的Web应用程序中创建一个页面,用户可以在该页面上输入电子邮件,以防万一他忘记了密码,从而要求输入新密码。
- 您的应用程序将生成唯一的访问权限,并将其绑定到发出请求的用户(我个人使用通用个人标识符)。
- 该应用程序将向用户发送一封电子邮件,其中包含指向访问权限的链接。
用户点击链接后,应用程序将确认正确的访问权限并允许用户更改密码。
看看这些简单的步骤如何提高应用程序的安全性? 如果需要,我们可以通过在请求和设置新密码之间添加时间限制来进一步提高安全级别。
如何哈希用户密码

Web应用程序中的密码必须进行哈希处理,而不是加密。 加密是一种双向算法。 该序列已加密,然后可以解密并重新使用。 该技术通常用于情报中以从盟友那里获取信息。
哈希表明该序列不能返回为纯文本。 这是整个过程的最终目标。
为了实现不同的目标,已经开发了许多算法:某些算法具有高速特征,而另一些则高度可靠。 这项技术在不断发展,并且在过去几年中发生了许多变化。 现在,我们将按时间顺序考虑它的三个最受欢迎的品种。
SHA-1
历史上这是第一个哈希函数。 首字母缩写SHA-1代表由美国国家安全局开发的“安全哈希算法”。
SHA-1是众所周知的,并且在PHP中广泛用于创建长度为40个字符的20字节十六进制字符串。
SSL行业已经使用SHA-1进行数字签名了几年了。 然后,在确定了一些弱点之后,Google决定是时候切换到SHA-2了。
该算法的第一版已于2005年弃用。 随后,开发并采用了新版本:SHA-2,SHA-2和SHA-256。
加密
BSHA不是SHA的自然发展的结果,但由于其安全级别,因此设法吸引了广泛的受众。
创建此极其缓慢的算法是为了创建最安全的哈希序列。 在对数据进行哈希处理的过程中,它经历了多个周期,在计算机技术中,这由人工成本的指标来描述。 劳动率越高,黑客获得密码的成本就越高。
好消息是:将来,我们将能够使用功能更强大的机器,这些机器能够更快地通过更多的周期。
氩气2
这是卢森堡大学的Alex Biryukov,Daniel Dinu和Dmitry Hovratovich开发的一种新的流行哈希算法。 在2015年,他赢得了密码哈希竞赛。
Argon2有3个版本:- Argon2d访问内存数组,从而减少了内存并节省了时间。 但是,他有通过第三方渠道受到攻击的风险。
- Argon2i与Argon 2d相反。 它针对第三方渠道的攻击进行了优化,并以独立于密码的方式访问内存。
- Argon2id是两个先前版本之间的中间版本。
此功能具有6个参数:
密码序列,盐,内存成本,时间成本,并行度因子(并行线程的最大允许数量),哈希长度。在本文的第二部分,我将告诉您如何使用内置函数在PHP中使用此哈希,现在我想邀请所有人参加
免费的在线Web服务器in“ ServerLess PHP”,在此我们将熟悉无服务器的概念,讨论其在AWS中的实现,适用性,价格。 我们将分析组装和启动的原理,并基于AWS Lambda构建一个简单的TG机器人。