PHP編碼規(guī)范

a、命名規(guī)約

變量:不知道類型的用大寫字母開頭则北。否則:

? ? 字符串 = $sMyName

? ? 數(shù)組 = $aMyCard 二維數(shù)組 = $aaMyCard

? ? 對象 = $oMyObject

? ? 資源 = $resource

? ? 布爾值 = $flag

? ? 整型 = $iMyNumber

? ? 浮點(diǎn)型 = $fMyMoney

類名命名規(guī)則 = ‘i’ + 接口命名規(guī)則? 例如:MyClass iMyInterface

數(shù)據(jù)庫中的所有內(nèi)容命名不得有大寫字母。表名和字段用下劃線連接單詞,例如:blog_user_info辈毯。

部分縮寫:

image = img

string = str

database = db

count = cnt

temporary = tmp

password = pwd

message = msg

代碼注釋應(yīng)該描述為什么,而不是做什么搜贤。

SQL盡量不要寫在函數(shù)里面谆沃,而是先賦給變量,再交給函數(shù)仪芒。

1.代碼中的命名均不能以下劃線或美元符號開始唁影,也不能以下劃線或美元符號結(jié)束。

反例: name / __name / $Object / name / name$ / Object$

2.代碼中的命名嚴(yán)禁使用拼音與英文混合的方式掂名。

正例: alibaba / taobao / youku / hangzhou 等國際通用的名稱据沈,可視同英文。

3. 【強(qiáng)制】類名使用 UpperCamelCase 風(fēng)格饺蔑,必須遵從駝峰形式锌介,但以下情形例外:(領(lǐng)域模型

的相關(guān)命名)PDO 等。

正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion

反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion

4.【強(qiáng)制】方法名猾警、參數(shù)名孔祸、成員變量、局部變量都統(tǒng)一使用 lowerCamelCase 風(fēng)格发皿,必須遵從

駝峰形式崔慧。

5. 【強(qiáng)制】常量命名全部大寫,單詞間用下劃線隔開穴墅,力求語義表達(dá)完整清楚惶室,不要嫌名字長。

正例: MAX_STOCK_COUNT

6. 【強(qiáng)制】類名特性應(yīng)在結(jié)尾出表明:異常類命名使用 Exception 結(jié)尾玄货;測試類

命名以它要測試的類的名稱開始皇钞,以 Test 結(jié)尾。

7. 【強(qiáng)制】杜絕完全不規(guī)范的縮寫誉结,避免望文不知義鹅士。

反例: AbstractClass“縮寫”命名成 AbsClass;condition“縮寫”命名成 condi惩坑,此類

隨意縮寫嚴(yán)重降低了代碼的可閱讀性掉盅。

. 【推薦】如果使用到了設(shè)計(jì)模式也拜,建議在類名中體現(xiàn)出具體模式。

正例:public class OrderFactory;

public class LoginProxy;

public class ResourceObserver;

b趾痘、格式規(guī)約

1. 【強(qiáng)制】大括號的使用約定慢哈。如果是大括號內(nèi)為空,則簡潔地寫成{}即可永票,不需要換行卵贱;如果

是非空代碼塊則:

1) 左大括號前不換行。

2) 左大括號后換行侣集。

3) 右大括號前換行键俱。

4) 右大括號后還有 else 等代碼則不換行;表示終止右大括號后必須換行世分。

2. 【強(qiáng)制】 左括號和后一個字符之間不出現(xiàn)空格编振;同樣,右括號和前一個字符之間也不出現(xiàn)空

格臭埋。詳見第 5 條下方正例提示踪央。

3. 【強(qiáng)制】if/for/while/switch/do 等保留字與左右括號之間都必須加空格。

4. 【強(qiáng)制】任何運(yùn)算符左右必須加一個空格。

說明:運(yùn)算符包括賦值運(yùn)算符=、邏輯運(yùn)算符&&童漩、加減乘除符號、三目運(yùn)行符等液斜。

5. 【強(qiáng)制】縮進(jìn)采用 4 個空格,禁止使用 tab 字符叠穆。

說明:如果使用 tab 縮進(jìn)旗唁,必須設(shè)置 1 個 tab 為 4 個空格。IDEA 設(shè)置 tab 為 4 個空格時痹束,

請勿勾選 Use tab character;而在 eclipse 中讶请,必須勾選 insert spaces for tabs祷嘶。

正例: (涉及 1-5 點(diǎn))

public static function student($id){

? ? //四個空格

? ? $id = 12;

? ? if ( $id == 1 ){

? ? ? ? echo 'no';

? ? } else {

? ? ? ? echo 'yes';

? ? }

}

6. 【強(qiáng)制】單行字符數(shù)限制不超過 120 個,超出需要換行夺溢,換行時遵循如下原則:

1) 第二行相對第一行縮進(jìn) 4 個空格论巍,從第三行開始,不再繼續(xù)縮進(jìn)风响,參考示例嘉汰。

2) 運(yùn)算符與下文一起換行。

3) 方法調(diào)用的符號與下文一起換行状勤。

4) 在多個參數(shù)超長鞋怀,逗號后進(jìn)行換行双泪。

5) 在括號前不要換行,見反例密似。

正例:

if ($a == $b || $c == $b

? ? || $b != $d && in_array($s,

? ? $arr))

7. 【強(qiáng)制】方法參數(shù)在定義和傳入時焙矛,多個參數(shù)逗號后邊必須加空格。

正例:下例中實(shí)參的"a",后邊必須要有一個空格残腌。

method("a", "b", "c");

8. 【強(qiáng)制】IDE 的 text file encoding 設(shè)置為 UTF-8; IDE 中文件的換行符使用 Unix 格式村斟,

不要使用 windows 格式。

9. 【推薦】沒有必要增加若干空格來使某一行的字符與上一行的相應(yīng)字符對齊抛猫。

正例:

int a = 3;

long b = 4L;

float c = 5F;

StringBuffer sb = new StringBuffer();

10. 【推薦】方法體內(nèi)的執(zhí)行語句組蟆盹、變量的定義語句組、不同的業(yè)務(wù)邏輯之間或者不同的語義

之間插入一個空行闺金。相同業(yè)務(wù)邏輯和語義之間不需要插入空行逾滥。

說明:沒有必要插入多行空格進(jìn)行隔開。

c掖看、OOP

1. 【強(qiáng)制】避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法匣距,直接用類名來訪問即可。

2. 【強(qiáng)制】所有的覆寫方法哎壳,必須加@Override 注解毅待。

反例:getObject()與 get0bject()的問題。一個是字母的 O归榕,一個是數(shù)字的 0尸红,加@Override

可以準(zhǔn)確判斷是否覆蓋成功。另外刹泄,如果在抽象類中對方法簽名進(jìn)行修改外里,其實(shí)現(xiàn)類會馬上編

譯報錯。

3. 【強(qiáng)制】構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯特石。

4. 【推薦】 類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法 > 私有方法 > 魔術(shù)方法盅蝗。

5. 【推薦】final 可提高程序響應(yīng)效率,聲明成 final 的情況:

1) 不需要重新賦值的變量姆蘸,包括類屬性墩莫、局部變量。

2) 對象參數(shù)前加 final逞敷,表示不允許修改引用的指向狂秦。

3) 類方法確定不允許被重寫。

6. 【推薦】類成員與方法訪問控制從嚴(yán):

1) 如果不允許外部直接通過 new 來創(chuàng)建對象推捐,那么構(gòu)造方法必須是 private裂问。

2) 工具類不允許有 public 構(gòu)造方法。

3) 類非 static 成員變量并且與子類共享,必須是 protected堪簿。

4) 類非 static 成員變量并且僅在本類使用痊乾,必須是 private。

5) 類 static 成員變量如果僅在本類使用戴甩,必須是 private符喝。

6) 若是 static 成員變量,必須考慮是否為 final甜孤。

7) 類成員方法只供類內(nèi)部調(diào)用协饲,必須是 private。

8) 類成員方法只對繼承類公開缴川,那么限制為 protected茉稠。

說明:任何類、方法把夸、參數(shù)而线、變量,嚴(yán)控訪問范圍恋日。過寬泛的訪問范圍膀篮,不利于模塊解耦。思

考:如果是一個 private 的方法岂膳,想刪除就刪除誓竿,可是一個 public 的 Service 方法,或者一

個 public 的成員變量谈截,刪除一下筷屡,不得手心冒點(diǎn)汗嗎?變量像自己的小孩簸喂,盡量在自己的視

線內(nèi)毙死,變量作用域太大,如果無限制的到處跑喻鳄,那么你會擔(dān)心的扼倘。

d、控制語句

1. 【強(qiáng)制】在一個 switch 塊內(nèi)除呵,每個 case 要么通過 break/return 等來終止唉锌,要么注釋說明程

序?qū)⒗^續(xù)執(zhí)行到哪一個 case 為止;在一個 switch 塊內(nèi)竿奏,都必須包含一個 default 語句并且

放在最后,即使它什么代碼也沒有腥放。

2. 【強(qiáng)制】在 if/else/for/while/do 語句中必須使用大括號泛啸,即使只有一行代碼,避免使用

下面的形式:if (condition) statements;

3. 【推薦】推薦盡量少用 else秃症, if-else 的方式可以改寫成:

if(condition){

...

return obj;

}

// 接著寫 else 的業(yè)務(wù)邏輯代碼;

說明:如果非得使用 if()...else if()...else...方式表達(dá)邏輯候址,【強(qiáng)制】請勿超過 3 層吕粹,

超過請使用狀態(tài)設(shè)計(jì)模式。

正例:邏輯上超過 3 層的 if-else 代碼可以使用衛(wèi)語句岗仑,或者狀態(tài)模式來實(shí)現(xiàn)匹耕。

4. 【推薦】除常用方法(如 getXxx/isXxx)等外,不要在條件判斷中執(zhí)行其它復(fù)雜的語句荠雕,將復(fù)

雜邏輯判斷的結(jié)果賦值給一個有意義的布爾變量名稳其,以提高可讀性。

說明:很多 if 語句內(nèi)的邏輯相當(dāng)復(fù)雜炸卑,閱讀者需要分析條件表達(dá)式的最終結(jié)果既鞠,才能明確什么

樣的條件執(zhí)行什么樣的語句,那么盖文,如果閱讀者分析邏輯表達(dá)式錯誤呢嘱蛋?

正例:

//偽代碼如下

boolean existed = (file.open(fileName, "w") != null) && (...) || (...);

if (existed) {

...

}

反例:

if ((file.open(fileName, "w") != null) && (...) || (...)) {

...

}

5. 【推薦】循環(huán)體中的語句要考量性能,以下操作盡量移至循環(huán)體外處理五续,如定義對象洒敏、變量、

獲取數(shù)據(jù)庫連接疙驾,進(jìn)行不必要的 try-catch 操作(這個 try-catch 是否可以移至循環(huán)體外)凶伙。

e、MySQL規(guī)約

1. 【強(qiáng)制】表達(dá)是與否概念的字段荆萤,必須使用 is_xxx 的方式命名镊靴,數(shù)據(jù)類型是 unsigned tinyint

( 1 表示是,0 表示否)链韭,此規(guī)則同樣適用于 odps 建表偏竟。

說明:任何字段如果為非負(fù)數(shù),必須是 unsigned敞峭。

2. 【強(qiáng)制】表名踊谋、字段名必須使用小寫字母或數(shù)字;禁止出現(xiàn)數(shù)字開頭旋讹,禁止兩個下劃線中間只

出現(xiàn)數(shù)字殖蚕。數(shù)據(jù)庫字段名的修改代價很大,因?yàn)闊o法進(jìn)行預(yù)發(fā)布沉迹,所以字段名稱需要慎重考慮睦疫。

正例:getter_admin,task_config鞭呕,level3_name

反例:GetterAdmin蛤育,taskConfig,level_3_name

3. 【強(qiáng)制】表名不使用復(fù)數(shù)名詞。

說明:表名應(yīng)該僅僅表示表里面的實(shí)體內(nèi)容瓦糕,不應(yīng)該表示實(shí)體數(shù)量底洗,對應(yīng)于 DO 類名也是單數(shù)

形式,符合表達(dá)習(xí)慣咕娄。

4. 【強(qiáng)制】禁用保留字亥揖,如 desc、range圣勒、match费变、delayed 等,請參考 MySQL 官方保留字灾而。

5. 【強(qiáng)制】唯一索引名為 uk_字段名胡控;普通索引名則為 idx_字段名。

說明:uk_ 即 unique key旁趟;idx_ 即 index 的簡稱昼激。

6. 【強(qiáng)制】小數(shù)類型為 decimal,禁止使用 float 和 double锡搜。

說明:float 和 double 在存儲的時候橙困,存在精度損失的問題,很可能在值的比較時耕餐,得到不

正確的結(jié)果凡傅。如果存儲的數(shù)據(jù)范圍超過 decimal 的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開存儲肠缔。

7. 【強(qiáng)制】如果存儲的字符串長度幾乎相等夏跷,使用 char 定長字符串類型。

8. 【強(qiáng)制】varchar 是可變長字符串明未,不預(yù)先分配存儲空間槽华,長度不要超過 5000,如果存儲長

度大于此值趟妥,定義字段類型為 text猫态,獨(dú)立出來一張表,用主鍵來對應(yīng)披摄,避免影響其它字段索

引效率亲雪。

9. 【強(qiáng)制】表必備三字段:id, gmt_create, gmt_modified。

說明:其中 id 必為主鍵疚膊,類型為 unsigned bigint义辕、單表時自增、步長為 1寓盗。gmt_create,

gmt_modified 的類型均為 date_time 類型终息。

10. 【推薦】表的命名最好是加上“業(yè)務(wù)名稱_表的作用”夺巩。

正例:tiger_task / tiger_reader / mpp_config

11. 【推薦】庫名與應(yīng)用名稱盡量一致。

12. 【推薦】如果修改字段含義或?qū)ψ侄伪硎镜臓顟B(tài)追加時周崭,需要及時更新字段注釋。

13. 【推薦】字段允許適當(dāng)冗余喳张,以提高性能续镇,但是必須考慮數(shù)據(jù)同步的情況。冗余字段應(yīng)遵循:

1)不是頻繁修改的字段销部。

2)不是 varchar 超長字段摸航,更不能是 text 字段。

正例:商品類目名稱使用頻率高舅桩,字段長度短酱虎,名稱基本一成不變,可在相關(guān)聯(lián)的表中冗余存

儲類目名稱擂涛,避免關(guān)聯(lián)查詢读串。

14. 【推薦】單表行數(shù)超過 500 萬行或者單表容量超過 2GB,才推薦進(jìn)行分庫分表撒妈。

說明:如果預(yù)計(jì)三年后的數(shù)據(jù)量根本達(dá)不到這個級別恢暖,請不要在創(chuàng)建表時就分庫分表。

15. 【參考】合適的字符存儲長度狰右,不但節(jié)約數(shù)據(jù)庫表空間杰捂、節(jié)約索引存儲,更重要的是提升檢

索速度棋蚌。

正例:人的年齡用 unsigned tinyint(表示范圍 0-255嫁佳,人的壽命不會超過 255 歲);海龜

就必須是 smallint谷暮,但如果是太陽的年齡蒿往,就必須是 int;如果是所有恒星的年齡都加起來坷备,

那么就必須使用 bigint熄浓。

16. 【強(qiáng)制】業(yè)務(wù)上具有唯一特性的字段,即使是組合字段省撑,也必須建成唯一索引赌蔑。

說明:不要以為唯一索引影響了 insert 速度,這個速度損耗可以忽略竟秫,但提高查找速度是明

顯的娃惯;另外,即使在應(yīng)用層做了非常完善的校驗(yàn)和控制肥败,只要沒有唯一索引趾浅,根據(jù)墨菲定律愕提,

必然有臟數(shù)據(jù)產(chǎn)生。

17. 【強(qiáng)制】 超過三個表禁止 join皿哨。需要 join 的字段浅侨,數(shù)據(jù)類型保持絕對一致;多表關(guān)聯(lián)查詢

時证膨,保證被關(guān)聯(lián)的字段需要有索引如输。

說明:即使雙表 join 也要注意表索引、SQL 性能央勒。

18. 【強(qiáng)制】在 varchar 字段上建立索引時不见,必須指定索引長度,沒必要對全字段建立索引崔步,根據(jù)

實(shí)際文本區(qū)分度決定索引長度稳吮。

說明:索引的長度與區(qū)分度是一對矛盾體,一般對字符串類型數(shù)據(jù)井濒,長度為 20 的索引灶似,區(qū)分

度會高達(dá) 90%以上,可以使用 count(distinct left(列名, 索引長度))/count(*)的區(qū)分度

來確定眼虱。

19. 【強(qiáng)制】頁面搜索嚴(yán)禁左模糊或者全模糊喻奥,如果需要請走搜索引擎來解決。

說明:索引文件具有 B-Tree 的最左前綴匹配特性捏悬,如果左邊的值未確定撞蚕,那么無法使用此索

引。

20. 【推薦】如果有 order by 的場景过牙,請注意利用索引的有序性甥厦。order by 最后的字段是組合

索引的一部分,并且放在索引組合順序的最后寇钉,避免出現(xiàn) file_sort 的情況刀疙,影響查詢性能。

正例:where a=? and b=? order by c; 索引:a_b_c

反例:索引中有范圍查找扫倡,那么索引有序性無法利用谦秧,如:WHERE a>10 ORDER BY b; 索引

a_b 無法排序。

21. 【推薦】利用覆蓋索引來進(jìn)行查詢操作撵溃,來避免回表操作疚鲤。

說明:如果一本書需要知道第 11 章是什么標(biāo)題,會翻開第 11 章對應(yīng)的那一頁嗎缘挑?目錄瀏覽

一下就好集歇,這個目錄就是起到覆蓋索引的作用。

正例:能夠建立索引的種類:主鍵索引语淘、唯一索引诲宇、普通索引际歼,而覆蓋索引是一種查詢的一種

效果,用 explain 的結(jié)果姑蓝,extra 列會出現(xiàn):using index鹅心。

22. 【推薦】利用延遲關(guān)聯(lián)或者子查詢優(yōu)化超多分頁場景。

說明:MySQL 并不是跳過 offset 行纺荧,而是取 offset+N 行巴帮,然后返回放棄前 offset 行,返回

N 行虐秋,那當(dāng) offset 特別大的時候,效率就非常的低下垃沦,要么控制返回的總頁數(shù)客给,要么對超過

特定閾值的頁數(shù)進(jìn)行 SQL 改寫。

正例:先快速定位需要獲取的 id 段肢簿,然后再關(guān)聯(lián):

SELECT a.* FROM 表 1 a, (select id from 表 1 where 條件 LIMIT 100000,20 ) b where a.id=b.id

23. 【推薦】SQL 性能優(yōu)化的目標(biāo):至少要達(dá)到 range 級別靶剑,要求是 ref 級別,如果可以是 consts

最好池充。

說明:

1)consts 單表中最多只有一個匹配行(主鍵或者唯一索引)桩引,在優(yōu)化階段即可讀取到數(shù)據(jù)。

2)ref 指的是使用普通的索引(normal index)收夸。

3)range 對索引進(jìn)行范圍檢索坑匠。

反例:explain 表的結(jié)果,type=index卧惜,索引物理文件全掃描厘灼,速度非常慢,這個 index 級

別比較 range 還低咽瓷,與全表掃描是小巫見大巫设凹。

24. 【推薦】建組合索引的時候,區(qū)分度最高的在最左邊茅姜。

正例:如果 where a=? and b=? 闪朱,a 列的幾乎接近于唯一值,那么只需要單建 idx_a 索引即

可钻洒。

說明:存在非等號和等號混合判斷條件時奋姿,在建索引時,請把等號條件的列前置航唆。如:where a>?

and b=? 那么即使 a 的區(qū)分度更高胀蛮,也必須把 b 放在索引的最前列。

25. 【參考】創(chuàng)建索引時避免有如下極端誤解:

1)誤認(rèn)為一個查詢就需要建一個索引糯钙。

2)誤認(rèn)為索引會消耗空間粪狼、嚴(yán)重拖慢更新和新增速度退腥。

3)誤認(rèn)為唯一索引一律需要在應(yīng)用層通過“先查后插”方式解決。

26. 【強(qiáng)制】不要使用 count(列名)或 count(常量)來替代 count(*)再榄,count(*)就是 SQL92 定義

的標(biāo)準(zhǔn)統(tǒng)計(jì)行數(shù)的語法狡刘,跟數(shù)據(jù)庫無關(guān),跟 NULL 和非 NULL 無關(guān)困鸥。

說明:count(*)會統(tǒng)計(jì)值為 NULL 的行嗅蔬,而 count(列名)不會統(tǒng)計(jì)此列為 NULL 值的行。

27. 【強(qiáng)制】count(distinct col) 計(jì)算該列除 NULL 之外的不重復(fù)數(shù)量疾就。注意 count(distinct

col1, col2) 如果其中一列全為 NULL澜术,那么即使另一列有不同的值,也返回為 0猬腰。

28. 【強(qiáng)制】當(dāng)某一列的值全是 NULL 時鸟废,count(col)的返回結(jié)果為 0,但 sum(col)的返回結(jié)果為

NULL姑荷,因此使用 sum()時需注意 NPE 問題盒延。

正例:可以使用如下方式來避免 sum 的 NPE 問題:SELECT IF(ISNULL(SUM(g)),0,SUM(g))

FROM table;

29. 【強(qiáng)制】使用 ISNULL()來判斷是否為 NULL 值。注意:NULL 與任何值的直接比較都為 NULL鼠冕。

說明:

1) NULL<>NULL 的返回結(jié)果是 NULL添寺,而不是 false。

2) NULL=NULL 的返回結(jié)果是 NULL懈费,而不是 true计露。

3) NULL<>1 的返回結(jié)果是 NULL,而不是 true楞捂。

30. 【強(qiáng)制】在代碼中寫分頁查詢邏輯時薄坏,若 count 為 0 應(yīng)直接返回,避免執(zhí)行后面的分頁語句寨闹。

31. 【強(qiáng)制】不得使用外鍵與級聯(lián)胶坠,一切外鍵概念必須在應(yīng)用層解決。

說明:(概念解釋)學(xué)生表中的 student_id 是主鍵繁堡,那么成績表中的 student_id 則為外鍵沈善。

如果更新學(xué)生表中的 student_id,同時觸發(fā)成績表中的 student_id 更新椭蹄,則為級聯(lián)更新闻牡。

外鍵與級聯(lián)更新適用于單機(jī)低并發(fā),不適合分布式绳矩、高并發(fā)集群罩润;級聯(lián)更新是強(qiáng)阻塞,存在數(shù)

據(jù)庫更新風(fēng)暴的風(fēng)險翼馆;外鍵影響數(shù)據(jù)庫的插入速度割以。

32. 【強(qiáng)制】禁止使用存儲過程金度,存儲過程難以調(diào)試和擴(kuò)展,更沒有移植性严沥。

33. 【強(qiáng)制】數(shù)據(jù)訂正時猜极,刪除和修改記錄時,要先 select消玄,避免出現(xiàn)誤刪除跟伏,確認(rèn)無誤才能執(zhí)

行更新語句。

34. 【推薦】in 操作能避免則避免翩瓜,若實(shí)在避免不了受扳,需要仔細(xì)評估 in 后邊的集合元素數(shù)量,控

制在 1000 個之內(nèi)兔跌。

35. 【參考】如果有全球化需要辞色,所有的字符存儲與表示,均以 utf-8 編碼浮定,那么字符計(jì)數(shù)方法

注意:

說明:

SELECT LENGTH("輕松工作"); 返回為 12

SELECT CHARACTER_LENGTH("輕松工作")层亿; 返回為 4

如果要使用表情桦卒,那么使用 utfmb4 來進(jìn)行存儲,注意它與 utf-8 編碼的區(qū)別匿又。

36. 【參考】TRUNCATE TABLE 比 DELETE 速度快方灾,且使用的系統(tǒng)和事務(wù)日志資源少,但 TRUNCATE

無事務(wù)且不觸發(fā) trigger碌更,有可能造成事故裕偿,故不建議在開發(fā)代碼中使用此語句。

說明:TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同痛单。

f嘿棘、安全規(guī)約

1. 【強(qiáng)制】隸屬于用戶個人的頁面或者功能必須進(jìn)行權(quán)限控制校驗(yàn)。

說明:防止沒有做水平權(quán)限校驗(yàn)就可隨意訪問旭绒、操作別人的數(shù)據(jù)鸟妙,比如查看、修改別人的訂單挥吵。

2. 【強(qiáng)制】用戶敏感數(shù)據(jù)禁止直接展示重父,必須對展示數(shù)據(jù)脫敏。

說明:查看個人手機(jī)號碼會顯示成:158****9119忽匈,隱藏中間 4 位房午,防止隱私泄露。

3. 【強(qiáng)制】用戶輸入的 SQL 參數(shù)嚴(yán)格使用參數(shù)綁定或者 METADATA 字段值限定丹允,防止 SQL 注入郭厌,

禁止字符串拼接 SQL 訪問數(shù)據(jù)庫袋倔。

4. 【強(qiáng)制】用戶請求傳入的任何參數(shù)必須做有效性驗(yàn)證。

說明:忽略參數(shù)校驗(yàn)可能導(dǎo)致:

? ? page size 過大導(dǎo)致內(nèi)存溢出

? ? 惡意 order by 導(dǎo)致數(shù)據(jù)庫慢查詢

? ? 任意重定向

? ? SQL 注入

? ? 反序列化注入

? ? 正則輸入源串拒絕服務(wù) ReDoS

說明:Java 代碼用正則來驗(yàn)證客戶端的輸入沪曙,有些正則寫法驗(yàn)證普通用戶輸入沒有問題奕污,

但是如果攻擊人員使用的是特殊構(gòu)造的字符串來驗(yàn)證,有可能導(dǎo)致死循環(huán)的效果液走。

5. 【強(qiáng)制】禁止向 HTML 頁面輸出未經(jīng)安全過濾或未正確轉(zhuǎn)義的用戶數(shù)據(jù)碳默。

6. 【強(qiáng)制】表單、AJAX 提交必須執(zhí)行 CSRF 安全過濾缘眶。

說明:CSRF(Cross-site request forgery)跨站請求偽造是一類常見編程漏洞嘱根。對于存在

CSRF 漏洞的應(yīng)用/網(wǎng)站,攻擊者可以事先構(gòu)造好 URL巷懈,只要受害者用戶一訪問该抒,后臺便在用戶

不知情情況下對數(shù)據(jù)庫中用戶參數(shù)進(jìn)行相應(yīng)修改。

7. 【強(qiáng)制】在使用平臺資源顶燕,譬如短信凑保、郵件、電話涌攻、下單欧引、支付,必須實(shí)現(xiàn)正確的防重放限制恳谎,

如數(shù)量限制芝此、疲勞度控制、驗(yàn)證碼校驗(yàn)因痛,避免被濫刷婚苹、資損。

說明:如注冊時發(fā)送驗(yàn)證碼到手機(jī)鸵膏,如果沒有限制次數(shù)和頻率舌劳,那么可以利用此功能騷擾到其

它用戶捌议,并造成短信平臺資源浪費(fèi)。

8. 【推薦】發(fā)貼、評論肛走、發(fā)送即時消息等用戶生成內(nèi)容的場景必須實(shí)現(xiàn)防刷隧出、文本內(nèi)容違禁詞過

濾等風(fēng)控策略饵隙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贵试,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子攀操,更是在濱河造成了極大的恐慌院仿,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異歹垫,居然都是意外死亡剥汤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門排惨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭敢,“玉大人,你說我怎么就攤上這事暮芭÷雇眨” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵辕宏,是天一觀的道長畜晰。 經(jīng)常有香客問我,道長瑞筐,這世上最難降的妖魔是什么凄鼻? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮聚假,結(jié)果婚禮上块蚌,老公的妹妹穿的比我還像新娘。我一直安慰自己膘格,他們只是感情好匈子,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著闯袒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪游岳。 梳的紋絲不亂的頭發(fā)上政敢,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音胚迫,去河邊找鬼喷户。 笑死,一個胖子當(dāng)著我的面吹牛访锻,可吹牛的內(nèi)容都是我干的褪尝。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼期犬,長吁一口氣:“原來是場噩夢啊……” “哼河哑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起龟虎,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤璃谨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佳吞,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拱雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了底扳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铸抑。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖衷模,靈堂內(nèi)的尸體忽然破棺而出鹊汛,到底是詐尸還是另有隱情,我是刑警寧澤算芯,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布柒昏,位于F島的核電站,受9級特大地震影響熙揍,放射性物質(zhì)發(fā)生泄漏职祷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一届囚、第九天 我趴在偏房一處隱蔽的房頂上張望有梆。 院中可真熱鬧,春花似錦意系、人聲如沸泥耀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痰催。三九已至,卻和暖如春迎瞧,著一層夾襖步出監(jiān)牢的瞬間夸溶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工凶硅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缝裁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓足绅,卻偏偏與公主長得像捷绑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氢妈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 阿里巴巴 JAVA 開發(fā)手冊 1 / 32 Java 開發(fā)手冊 版本號 制定團(tuán)隊(duì) 更新日期 備 注 1.0.0 阿...
    糖寶_閱讀 7,524評論 0 5
  • 一粹污、編程規(guī)約 (一)命名規(guī)約 【強(qiáng)制】 代碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結(jié)束首量。反...
    喝咖啡的螞蟻閱讀 1,490評論 0 2
  • 命名風(fēng)格 【強(qiáng)制】代碼中的命名均不能以下劃線或美元符號開始厕怜,也不能以下劃線或美元符號結(jié)束 【強(qiáng)制】代碼中的命名嚴(yán)禁...
    云A00000閱讀 3,604評論 0 0
  • 一、基本約定 1、源文件 (1)粥航、純PHP代碼源文件只使用 <?php 標(biāo)簽琅捏,省略關(guān)閉標(biāo)簽 ?> ;(2)递雀、源文件...
    LinkChen92閱讀 1,299評論 0 0
  • 藍(lán)司澤最終決定放下這段感情柄延,放在心里五年多了,如今知道唐小北過得幸福缀程,他也放心了搜吧,也沒有什么好奢望的。 拍賣會上杨凑,...
    今在否閱讀 263評論 0 0