7 篇文章 最佳实践

现代PHP最佳实践:使用组件开发应用、输入过滤、密码、日期时间、数据库、流处理、错误和异常。。。

【最佳实践系列】PHP 日期、时间和时区处理 API 及组件

datetime

处理日期和时间需要考虑很多事情,例如日期的格式、时区、闰年和天数各异的月份,自己处理太容易出错了,我们应该使用PHP 5.2.0引入的DateTime、DateIntervel和DateTimeZone这些类帮助我们创建及处理日期、时间和时区。 设置默认时区 首先我们要为PHP中处理日期和时间的函数设置默认时区,如果不设置的话,PHP会显示一个E_WARNING消息,设置默认时区有两种方…

【最佳实践系列】PHP 开发者如何做好密码保护 & Laravel 底层密码存储和验证实现

cwscrypto-php-hash-password-pbkdf2-bcrypt

随着在线攻击的增多,密码安全越来越重要。作为开发者我们要担负起安全管理、计算哈希和存储用户密码的责任,不管应用是简单的游戏还是绝密商业文件的仓库,都要做到这一点。PHP内置了一些工具,让保护密码变得更加容易,本节我们就来讨论如何根据现代的安全措施来使用这些工具。 1、密码保护三原则 绝对不能知道用户的密码 我们绝对不能知道用户的密码,也不能有获取用户密码的方式,如果应用的数据库被黑,你肯…

【最佳实践系列】PHP 安全三板斧:过滤、验证和转义之转义篇 & Blade模板引擎避免XSS攻击原理探究

PHP安全漫谈

PHP 转义实现 把输出渲染成网页或API响应时,一定要转义输出,这也是一种防护措施,能避免渲染恶意代码,造成XSS攻击,还能防止应用的用户无意中执行恶意代码。 我们可以使用前面提到的htmlentities函数转移输出,该函数的第二个参数一定要使用ENT_QUOTES,让这个函数转义单引号和双引号,而且,还要在第三个参数中指定合适的字符编码(通常是UTF-8),下面的例子演示了如何在渲…

最佳实践系列(四)—— PHP 安全三板斧:过滤、验证和转义之验证篇 & Laravel底层字段验证实现

PHP安全漫谈

2、验证数据 PHP原生实现 验证输入数据也很重要,与过滤不同,验证不会从输入数据中删除信息,而只是确认用户输入是否符合预期。如果输入的是电子邮件地址,则确保用户输入的是电子邮件地址;如果需要的是电话号码,则确保用户输入的是电话号码,这就是验证要做的事儿。 验证是为了保证在应用的存储层保存符合特定格式的正确数据,如果遇到无效数据,要中止数据存储操作,并显示相应的错误信息来提醒用户输入正确…

最佳实践系列(三)—— PHP 安全三板斧:过滤、验证和转义之过滤篇 & Laravel底层SQL注入规避

PHP安全漫谈

我们在开发应用时,一般有个约定:不要信任任何来自不受自己控制的数据源中的数据。例如以下这些外部源: $_GET $_POST $_REQUEST $_COOKIE $argv php://stdin php://input file_get_contents() 远程数据库 远程API 来自客户端的数据 所有这些外部源都可能是攻击媒介,可能会(有意或无意)把恶意数据注入PHP脚本。编写接…

最佳实践系列(二)—— 聊聊 PHP 私有组件以及如何创建自己的 PHP 组件

composer-git-packagist

1、私有组件 大多数时候我们使用的都是公开可用的开源组件,但有时候如果公司使用内部开发的PHP组件,而基于许可证和安全方面的问题不能将其开源,就需要使用私有组件。对Composer而言,这是小菜一碟。 Composer可用管理放在需要认证的仓库中的私有PHP组件,执行composer install或composer update命令时,如果组件的仓库需要认证凭据,Composer会提醒…

最佳实践系列(一)—— 漫谈 PHP 组件、框架、Composer 那些事

Packagist

1、什么是组件 组件是一组打包的代码,是一系列相关的类、接口和Trait,用于帮助我们解决PHP应用中某个具体问题。例如,你的PHP应用需要收发HTTP请求,可以使用现成的组件如guzzle/guzzle实现。我们使用组件不是为了重新实现已经实现的功能,而是把更多时间花在实现项目的长远目标上。 优秀的PHP组件具备以下特性: 作用单一:专注于解决一个问题,而且使用简单的接口封装功能 小型…