PHP安全之道:密码安全

   最近几年用户数据泄露越发频繁,一些使用PHP技术的大型网站被暴库或者脱库,facebook公司曾因为此类事件股价暴跌。从长远发展来看,用户的数据安全对于网站来说至关重要,所以开发者需要关注数据相关的安全,并提高一些对敏感数据的技术性保护。

   用户数据的安全往往和用户密码安全息息相关。用户将账号和相关数据存储在服务器上,而密码成了第一个环节。

  • 1.常规加密方法

    MD5或者SHA1

具体代码如下所示:

<?php
$password = $_POST['password'];
echo md5($password); // md5加密
echo sha1($password); // sha1加密

   由于这种加密手段比较常规,如果用户设置的密码过于常见简单,攻击者完全可以使用密码字典进行暴力破解。所以不建议使用MD5等弱加密算法对密码等敏感数据进行加密,使用散列算法进行加密更佳,如:SHA256或者SHA512。这些算法被用于如ssl证书生成或一些重要的生成算法中,值得使用。

PHP内置了hash()函数,具体使用如下代码所示。

<?php
$password = $_POST['password'];
echo hash('sha256', $password); // 使用sha256加密
echo hash('sha512', $password); // 使用sha512加密

曾经有一个神奇的电商网站有一句有名的slogan:"我为自己代言。"在密码安全方面我们也可以为自己的数据加点“盐”,增加安全系数。

使用盐(salt)甚至随机salt来加密,可以让破解更加困难。简单例子如下:

<?php
$password = $_POST['password'];
$salt = rand(1, 100000);
$password = sha1($password . $salt);

而更为复杂的加密,可以使用mcrypt函数来生成salt,代码如下:

<?php
$password = $_POST['password'];
$salt = base64_encode(mcrpyt_create_iv(32, MCRYPT_DEV_RANDOM);
$password = md5($password . $salt);

当然还可以根据自己实际业务需要自定义自己的算法,以前和腾讯的研发联调接口的时候,我们还会约定不同的业务接口使用不同的业务代码来增加token算法的复杂度。

为了防止暴力破解,可以注意以下方面:

  • 1.使用验证码进行登录验证或相关授权。
  • 2.定期刷新秘钥。
  • 3.使用随机数的复杂算法。
  • 4.限制某时间段内验证次数。

PHP安全之道学习笔记6:密码安全的更多相关文章

  1. postgresql修炼之道学习笔记(1)

    好好学习吧. 本笔记 仅作为摘要记录 前两章,主要是数据库对比和安装等. 对比,就比多说了,总是和别人比较,会显得自己身价低,呵呵. 安装也有很多文章,不多说. 第二章提到了一些简单的配置, 其在 d ...

  2. postgresql修炼之道学习笔记(2)

    随后的章节  介绍了基础的sql,这个我略过了,我喜欢在开发的时候,慢慢的研究,毕竟有oracle的基础. 现在,学习psql工具 使用create database创建数据库的时候,出现如下问题: ...

  3. PHP安全之道学习笔记1:PHP项目安全设置

    在全球范围来看,超过了80%的网站是使用php进行搭建的,由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患.从配置选项来看,可以做如下的优化. 1.屏蔽PHP错误输出. 在/etc/p ...

  4. PHP安全之道学习笔记2:编码安全指南

    编码安全指南 编程本身就应该是一门艺术,而安全编程更是一种在刀尖上舞蹈的艺术,不仅要小心脚下的锋利寒刃,更要小心来自网络黑客或攻击者的狂轰乱炸. - by code artist 1.hash比较的缺 ...

  5. 学习笔记-CTF密码相关

    RSA共模攻击 RSA基本原理 ①  选择两个大的质数p和q,N=pq: ②  根据欧拉函数,求得r=(p-1)(q-1): ③  选一个小于r的整数e,求得e关于模r的模反元素d: ④  将p和q的 ...

  6. PHP安全之道学习笔记4:系统命令注入

    系统命令注入 我们有时候写代码会用php脚本去调用系统函数完成业务功能,但是一些系统函数属于高危操作,一旦被webshell或者抓住漏洞则后患极大. 下面整理如下风险系统函数. exec() 函数 该 ...

  7. linux运维之道学习笔记

    linux常用命令 1.find命令 find / "*.log" 查找/目录下.log结尾的档案 find / -mtime -3 查找/目录下三天内被修改的档案 find / ...

  8. SQL反模式学习笔记20 明文密码

    目标:恢复或重置密码 反模式:使用明文存储密码 1.存储密码 使用明文存储密码或者在网络上传递密码是不安全的. 如果攻击者截取到你用来插入(或者修改)密码的sql语句,就可以获得密码.     黑客获 ...

  9. 【学习笔记】OI玄学道—代码坑点

    [学习笔记]\(OI\) 玄学道-代码坑点 [目录] [逻辑运算符的短路运算] [\(cmath\)里的贝塞尔函数] 一:[逻辑运算符的短路运算] [运算规则] && 和 || 属于逻 ...

  10. 【Python灰帽子--黑客与逆向工程师的Python编程之道】我的学习笔记,过程.(持续更新HOT)

    我的学习笔记---python灰帽子 世界让我遍体鳞伤,但伤口长出的却是翅膀. -------------------------------------------- 前言 本书是由知名安全机构Im ...

随机推荐

  1. Netty源码学习9——从Timer到ScheduledThreadPoolExecutor到HashedWheelTimer

    系列文章目录和关于我 一丶前言 之前在学习netty源码的时候,经常看netty hash时间轮(HashedWheelTimer)的出现,时间轮作为一种定时调度机制,在jdk中还存在Timer和Sc ...

  2. TypeScript核心基础

    前言 为了方便我们直接使用脚手架让他帮我们直接编译就完事了 创建一个 Vue 应用 前提条件 熟悉命令行 已安装 16.0 或更高版本的 Node.js npm init vue@latest 这一指 ...

  3. javaScript正则截取自定义标签-javascript-zheng-ze-jie-qu-zi-ding-yi-biao-qian

    title: javaScript正则截取自定义标签 date: 2021-12-29 17:31:48.448 updated: 2021-12-29 17:31:48.448 url: https ...

  4. MyBatis—Spring 动态数据源事务的处理

    在一般的 Spring 应用中,如果底层数据库访问采用的是 MyBatis,那么在大多数情况下,只使用一个单独的数据源,Spring 的事务管理在大多数情况下都是有效的.然而,在一些复杂的业务场景下, ...

  5. JavaScript apply、call、bind 函数详解

    apply和call apply和call非常类似,都是用于改变函数中this的指向,只是传入的参数不同,等于间接调用一个函数,也等于将这个函数绑定到一个指定的对象上: let name = 'win ...

  6. 你要了解的 OpenAI 那些事:创立简史,技术背景等

    原文: https://openaigptguide.com/what-is-openai/ OpenAI 是一家人工智能研究公司,成立于2015年,总部位于美国旧金山.目前,OpenAI由创始人Sa ...

  7. Spark-submit执行流程,了解一下

    摘要:本文主要是通过Spark代码走读来了解spark-submit的流程. 1.任务命令提交 我们在进行Spark任务提交时,会使用"spark-submit -class .....&q ...

  8. Solon 开发进阶

    Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 本系列在内核知识的基础上做进一步延申.主要涉及: 插件扩展体系 体外扩展体系 常用配置 ...

  9. JMeter 源码解读 - HashTree

    背景: 在 JMeter 中,HashTree 是一种用于组织和管理测试计划元素的数据结构.它是一个基于 LinkedHashMap 的特殊实现,提供了一种层次结构的方式来存储和表示测试计划的各个组件 ...

  10. 透析阿里云视频云「低代码音视频工厂」之能量引擎——vPaaS 视频原生应用开发平台

    为满足企业用户极速搭建高品质专属音视频业务的需求,阿里云视频云的"低代码音视频工厂"应运而生,但极速而高品质的平台搭建诉求,需要用全新的开发方式才能真正实现,而全新的开发方式背后蕴 ...