今天看了三块内容,字符的过滤,密码的 hash,还有就是 PHP 内的日期类。本来今天还打算把数据库这块看掉,但这块实在太重要了,以后面试的时候也肯定会问到,所以明天重点看一下数据库。(😂主要今天下午还去了图书馆,就没有完整的一块时间了)。
字符的过滤
字符过滤有三个基本要求:
- 过滤 (Sanitize)
- 验证 (Validate)
- 跳脱 (Escape) (是这样翻译吗??)
过滤
首先是过滤,这个还蛮重要的,要不然一不小心别人就把sql执行语句或者 html 插入进来了。
php 自带有一个 html 过滤函数和 sql 语句过滤函数。
1 |
|
使用 htmlentities 这个 php 内置函数之后输出就没有了<p>
这些 html 代码了。
过滤 sql 语句的话,使用 PDO 的前置检查就行(PDO 的话还是很安全的,mysql_query()
这种不要用了,php7都废弃了,而且很不安全)
验证
主要是验证拿到的数据是否符合自己的要求,这个前端限制一个,后端也限制一下比较好。
比方说限制邮箱格式
1 |
|
filter_var
函数,在配上 php 内置的FILTER_SANITIZE_EMAIL
常量可以做到邮箱的验证。搭配其他的常量,比方说搭配FILTER_SANITIZE_STRING
就可以实现其他类型的验证。
还有一些就是要自己去数据库里查找对应数据来进行验证。
跳脱
这篇看的不是很懂,大意应该是,最终展现在前端的时候还要再过滤一下语句。
密码
储存密码的几个原则:
- 从不要知道用户的密码
- 从不要限制用户的密码
- 从不要明文发送密码给用户
- 使用hash而不是加密
因为 php 有内置密码函数,所以非常方便,哈希用 password_hash()
, 验证用 password_verify()
,就可以了,已经非常安全了,php 会自己加盐的。以前我也知道php 会自动加盐,但我一直好奇他加的盐储存在哪里,后来我知道了,在hash
过后的那串字符中就有储存盐值,所以直接用 password_verify()
他就会自己去校验,都封装好了。
日期
日期这个比较麻烦(主要是格式转来转去,还有计算一些差值),但有时候一定要用它,所以还是有必要看下的。date_default_timezone_set('Asia/Shanghai');
这句可以设置时区,国内一般设置为上海,东八区。
DateTime
1 |
|
然后就是一些普通的用法,不过下面我还是要展示一下 DateInterval
这个类,以前还真没用过,这个主要是设定时间区间的。
DateInterval
1 |
|
比方说我设置了区间两周(P2W就是两周的意思),然后将它加到 datetime
上,这样datetime
的日期就会增加两周。
DatePeriod
这个 DatePeriod
类我也是第一次见,这个搭配上上面两个,可以指定初始时间,然后间隔,再加上一个次数,可以很好的实现一些循环任务。
1 |
|
最后
明天要好好看下数据库了。