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