摘要:背景在公司入職,老大讓我去做數據脫敏,通過調用運維組的數據脫敏接口,保證用戶的敏感的信息不落地。公司項目主要使用和版本。
背景:
在A公司入職,老大讓我去做數據脫敏,通過調用運維組的數據脫敏接口,保證用戶的敏感的信息不落地。公司項目主要使用laravel5.1 和 YII1.1 版本。
具體方案:
敏感信息字段的調用存在與代碼中的各個角落,如果手動對每一個地方的代碼都去擼一邊,所需要耗費的時間是非常巨大的,為了減少工作量,我們決定對model下手,考慮到并不是所有的model都存在脫敏信息,多帶帶定義一個trait來處理存在敏感信息似乎是一個相對比較穩妥的方式。
我們對于脫敏的主要思想是對__get()和__set()兩個魔術方法的改造,希望在最大程度的減少對使用類似User::model()->username的影響,以Yii1.1框架為例,還要改造findByAttributes()等方法避免大量findByXXX()方法的失效
public function __get($name) { //getPlainKeys() 定義了model當中的需要的脫敏信息字段 if(in_array($name, $this->getPlainKeys())) { $enc_name = Mask::getMaskName($name);//encrypt_username if(empty($this->$enc_name)) { return parent::($name); //兼容代碼,用戶數據未更新時調用 } $plain_value = Mask::encrypt(Mask::getMaskType($name), $this->$name);//返回明文 return $plain_value; }else { return parent::($name);//不要使用$this->$name 防止多次調用__get() } }
重寫完__get()的方法后,在定義一個getPlain()的方法,傳入返回明文的字段,
通過User::model()->getPlain(["username"])->username的方法返回需要的明文就好了,在這之前,需要在需要脫敏的model里面加好訂好的脫敏信息的字段$mask_key["username","mobile"]
/** * 往數組里塞值 **/ public function getPlain($keys) { foreach($keys as $key){ if(in_array($key, $this->getMaskName())) {//比較mask_key array_merge($this->getPlainKeys(), $keys); } } return $this; }
當然了,如果直接通過User::model()->username的地方很多,又需要明文的地方很多,就在model里面直接添加一個$plain_keys的字段去默認返回明文就好了,同時去新增一個能夠將$plain_keys里面的值移除的方法就好了,例如User::model()->removePlainKeys("username")->username返回打碼明文就好了.
public function __set($name, $value) { if(in_array($name, $this->getMaskKeys())){ ... //產生字段名稱encrypt_username, plain_username if(empty($value)) { //防止某些情況下可能發生的將敏感信息寫回空值的情況,enccrypt_username 存在將回返回舊的歷史數據 $this->setAttributes($name, ""); $this->setAttributes($encrypt_username, ""); $this->setAttributes($plain_username, ""); } $data = Mask::doencrypt(Mask::getMaskType($name),$value) $this->setAttributes($name, $data["plain_text"]); $this->setAttributes($encrypt_username, $data["hash"]); $this->setAttributes($plain_username, $value; }else { reutrn parent::__set($name, $vk) } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/28220.html
摘要:接下來我們以余額寶為例,重點剖析天弘基金在日志數據分析領域是如何突破的此前,天弘基金一直使用開源的日志方案,研發和運維人員通過對日志數據進行處理,使用日志文件進行查詢檢索。 雙十一剛剛結束,其實最緊張的不是商鋪理貨,也不是網友緊盯大促商品準備秒殺,而是網購幕后的運維人員,他們最擔心:什么網絡中斷、應用卡頓、響應速度慢,服務器宕機……雙十一作為電商 IT 部門的頭等大事,大促前,運維人員就需要...
摘要:阿里云成為唯一入選的中國產品。在阿里云的眾多產品中,和共同構成了服務能力的核心。作為大數據能力賦能的重要手段,出現在了等阿里云專有云解決方案中。利用云計算技術,互聯網公司得以快速的將自身的大數據處理能力對外賦能。 1.前言 本文基于Now Tech: Cloud Data Warehouse, Q1 2018 (Published: by Noel Yuhanna, March 13,...
摘要:阿里云成為唯一入選的中國產品。在阿里云的眾多產品中,和共同構成了服務能力的核心。作為大數據能力賦能的重要手段,出現在了等阿里云專有云解決方案中。利用云計算技術,互聯網公司得以快速的將自身的大數據處理能力對外賦能。 1.前言 本文基于Now Tech: Cloud Data Warehouse, Q1 2018 (Published: by Noel Yuhanna, March 13,...
摘要:阿里云成為唯一入選的中國產品。在阿里云的眾多產品中,和共同構成了服務能力的核心。作為大數據能力賦能的重要手段,出現在了等阿里云專有云解決方案中。利用云計算技術,互聯網公司得以快速的將自身的大數據處理能力對外賦能。 摘要: Forrester發布了Now Tech: Cloud Data Warehouse Q1 2018報告,報告對云化數據倉庫(Cloud Data Warehouse...
閱讀 4167·2022-09-16 13:49
閱讀 1407·2021-11-22 15:12
閱讀 1529·2021-09-09 09:33
閱讀 1047·2019-08-30 13:15
閱讀 1732·2019-08-29 15:30
閱讀 665·2019-08-27 10:52
閱讀 2649·2019-08-26 17:41
閱讀 1904·2019-08-26 12:11