pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

PHP實(shí)踐教程之過濾、驗(yàn)證、轉(zhuǎn)義與密碼詳解

我們在開發(fā)應(yīng)用時(shí),一般有個(gè)約定:不要信任任何來自不受自己控制的數(shù)據(jù)源中的數(shù)據(jù)。所以這個(gè)時(shí)候就用到了這篇文章介紹的內(nèi)容,本文主要給大家介紹了關(guān)于PHP實(shí)踐教程之過濾、驗(yàn)

本文主要給大家介紹的是關(guān)于PHP實(shí)踐之過濾、驗(yàn)證、轉(zhuǎn)義與密碼等相關(guān)的內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹:

一、過濾、驗(yàn)證和轉(zhuǎn)義

1).不要相信任何來自不受自己直接控制的數(shù)據(jù)源中的數(shù)據(jù)。包括但不限于:

  • $_GET
  • $_POST
  • $_REQUEST
  • $_COOKIE
  • $argv
  • php://stdin
  • php://input
  • file_get_contents()
  • 遠(yuǎn)程數(shù)據(jù)庫
  • 遠(yuǎn)程API
  • 來自客戶端的數(shù)據(jù)

2).解決辦法:過濾輸入。刪除不安全的字符,在數(shù)據(jù)到達(dá)應(yīng)用的存儲層之前,必須過濾數(shù)據(jù)。需要過濾的數(shù)據(jù)包括不限于:HTML、SQL查詢和用戶資料信息。

  • HTML:使用htmlentities()函數(shù)過濾HTML成對應(yīng)的實(shí)體。這個(gè)函數(shù)會轉(zhuǎn)義制定字符的HTML字符,以便在存儲層安全的渲染。正確的使用方式是使用htmlentities($input, ENT_QUOTES, 'UTF-8')過濾輸入?;蛘呤褂肏TML Purifier。缺點(diǎn)是慢
  • SQL查詢: 有時(shí)必須根據(jù)數(shù)據(jù)構(gòu)建SQL查詢。這時(shí)要要使用PDO預(yù)處理語句過濾外部數(shù)據(jù)。
  • 用戶資料信息:使用filter_var()filter_input()過濾用戶資料信息

3).驗(yàn)證數(shù)據(jù):也可以使用filter_var() ,驗(yàn)證成功返回要驗(yàn)證的值,失敗返回false。但是這個(gè)函數(shù)無法驗(yàn)證所有數(shù)據(jù),所以可以使用一些驗(yàn)證功能組件。例如aura/filter或者symfony/validator

4)轉(zhuǎn)義輸出:任然可以使用htmlentities這個(gè)函數(shù),一些模板引擎也自帶了轉(zhuǎn)義功能。

密碼

       1).絕對不能知道用戶的密碼。

       2).絕對不要約束用戶的密碼,要限制的話只限制最小長度。

       3).絕對不能使用電子郵件發(fā)送用戶的密碼。你可以發(fā)送一個(gè)修改密碼的鏈接,上面帶一個(gè)token驗(yàn)證是用戶本人就行了。

       4).使用bcrypt計(jì)算用戶密碼的哈希值。加密和哈希不是一回事,加密是雙向算法,加密的數(shù)據(jù)可以被解密。但是哈希是單項(xiàng)算法,哈希之后的數(shù)據(jù)無法被還原,想同的數(shù)據(jù)哈希之后得到的數(shù)據(jù)始終是相同的。使用數(shù)據(jù)庫存儲通過bcrypt哈希密碼之后的值。

       5).使用密碼哈希API簡化計(jì)算密碼哈希和驗(yàn)證密碼的操作。下面的注冊用戶的一般操作

POST /register.php HTTP/1.1
Content-Length: 43
Content-type: application/x-www-form-urlencoded

email=xiao@hello.world&password=nihao

下面是接受這個(gè)請求的PHP文件

<?php
try {
 $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
 if (!$email) {
  throw new Exception('Invalid email');
 }
 $password = filter_iput(INPUT_POST, 'password');
 if (!$password || mb_strlen($password) < 8) {
  throw new Exception('Password must contain 8+ characters');
 }
 //創(chuàng)建密碼的哈希值
 $passwordHash = password_hash(
  $password,
  PASSWORD_DEFAULT,
  ['cost' => 12]
  );

 if ($passwordHash === false) {
  throw new Exception('Password hash failed');
 }

 //創(chuàng)建用戶賬戶,這里是虛構(gòu)的代碼
 $user = new User();
 $user->email = $email;
 $user->password_hash = $passwordHash;
 $user->save();
 header('HTTP/1.1 302 Redirect');
 header('Location: /login.php');
} catch (Exception $e) {
 header('HTTP1.1 400 Bad Request');
 echo $e->getMessage();
}

       6).根據(jù)機(jī)器的具體計(jì)算能力修改password_hash()的第三個(gè)值。計(jì)算哈希值一般需要0.1s-0.5s。

       7).密碼的哈希值存儲在varchar(255)類型的數(shù)據(jù)庫列中。

       8).登錄用戶的一般流程

POST /login.php HTTP1.1
Content-length: 43
Content-Type: application/x-www-form-urlencoded

email=xiao@hello.wordl&pasword=nihao
session_start();
try {
 $email = filter_input(INPUT_POST, 'email');
 $password = filter_iinput(INPUT_POST, 'password');

 $user = User::findByEmail($email);

 if (password_verify($password, $user->password_hash) === false) {
  throw new Exception(''Invalid password);
 }

 //如果需要的話,重新計(jì)算密碼的哈希值
 $currentHasAlgorithm = PASSWORD_DEFAULT;
 $currentHashOptions = array('cost' => 15);
 $passwordNeedsRehash = password_needs_rehash(
  $user->password_hash,
  $currentHasAlgorithm,
  $currentHasOptions
 );
 if ($passwordNeedsRehash === true) {
  $user->password_hash = password_hash(
   $password,
   $currentHasAlgorithm,
   $currentHasOptions
  );

  $user->save();
 }

 $_SESSION['user_logged_in'] = 'yes';
 $_SESSION['user_email'] = $email;

 header('HTTP/1.1 302 Redirect');
 header('Location: /user-profile.php');
} catch (Exception) {
 header('HTTP/1.1 401 Unauthorized');
 echo $e->getMessage();
}

      9).PHP5.5.0版本之前的密碼哈希API無法使用,推薦使用ircmaxell/password-compat組件。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對的支持。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過測試外,其他素材未做測試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請勿用于商業(yè)用途。如損害你的權(quán)益請聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁的示例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對比分析了php針對多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開發(fā)接口使用RSA進(jìn)行加密解密方法,對此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 消防设施操作员考试报名时间,报名入口,报考条件 | 云南外加剂,云南速凝剂,云南外加剂代加工-普洱澜湄新材料科技有限公司 | 网带通过式抛丸机,,网带式打砂机,吊钩式,抛丸机,中山抛丸机生产厂家,江门抛丸机,佛山吊钩式,东莞抛丸机,中山市泰达自动化设备有限公司 | 杭州中策电线|中策电缆|中策电线|杭州中策电缆|杭州中策电缆永通集团有限公司 | 温湿度记录纸_圆盘_横河记录纸|霍尼韦尔记录仪-广州汤米斯机电设备有限公司 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | LINK FASHION 童装·青少年装展| 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 | 下水道疏通_管道疏通_马桶疏通_附近疏通电话- 立刻通 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 合肥防火门窗/隔断_合肥防火卷帘门厂家_安徽耐火窗_良万消防设备有限公司 | 电缆接头_防水接头_电缆防水接头_防水电缆接头_上海闵彬 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 吉祥新世纪铝塑板_生产铝塑板厂家_铝塑板生产厂家_临沂市兴达铝塑装饰材料有限公司 | 营养师网,营养师考试时间,报名入口—网站首页 | 环氧铁红防锈漆_环氧漆_无溶剂环氧涂料_环氧防腐漆-华川涂料 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 氟氨基酮、氯硝柳胺、2-氟苯甲酸、异香兰素-新晨化工 | 耐火浇注料价格-高强高铝-刚玉碳化硅耐磨浇注料厂家【直销】 | 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 集菌仪厂家_全封闭_封闭式_智能智能集菌仪厂家-上海郓曹 | 螺旋丝杆升降机-SWL蜗轮-滚珠丝杆升降机厂家-山东明泰传动机械有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 网站建设-高端品牌网站设计制作一站式定制_杭州APP/微信小程序开发运营-鼎易科技 | 高清视频编码器,4K音视频编解码器,直播编码器,流媒体服务器,深圳海威视讯技术有限公司 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 智成电子深圳tdk一级代理-提供TDK电容电感贴片蜂鸣器磁芯lambda电源代理经销,TDK代理商有哪些TDK一级代理商排名查询。-深圳tdk一级代理 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 金属雕花板_厂家直销_价格低-山东慧诚建筑材料有限公司 | 校车_校车价格_19座幼儿园校车_幼儿园校车_大鼻子校车 | 膜结构_ETFE膜结构_膜结构厂家_膜结构设计-深圳市烨兴智能空间技术有限公司 | 便携式谷丙转氨酶检测仪|华图生物科技百科| 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 密封圈_泛塞封_格莱圈-[东莞市国昊密封圈科技有限公司]专注密封圈定制生产厂家 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 |