{eval=Array;=+count(Array);}
1.凡事涉及到用戶輸入操作的必須前后端檢驗,盡可能限制輸入的范圍,例如排除特殊字符
2. 數(shù)據(jù)庫必須只能內(nèi)網(wǎng)訪問,涉及到sql操作必須使用預(yù)編譯,防止sql直接提交到數(shù)據(jù)庫,例如mybatis的#占位符,而不是$
3. 鑒權(quán):所有涉及到面向客戶的操作須鑒權(quán),防止出現(xiàn)暴力破解情況,核心接口可做訪問統(tǒng)計,限流控制,錯誤信息個性化定制,不暴露內(nèi)部信息,一般使用內(nèi)部約定的錯誤碼等形式
第一,項目分層處理!邏輯層和數(shù)據(jù)層嚴(yán)格分開,不要隨意暴露數(shù)據(jù)表結(jié)構(gòu)!
第二,對用戶輸入進行驗證,對客戶輸入的數(shù)據(jù)進行參數(shù)化查詢!
1. 能不用sql語句就不用
比如很多orm 框架或庫都將sql語句操作隱藏起來了,你直接 new 一個對象,然后insert. 或 update. 從數(shù)據(jù)庫取出來也是一個對象。
2. 非要用sql,盡量用預(yù)編譯
預(yù)編譯的流程是先預(yù)編譯,然后綁定執(zhí)行。 綁定時不會發(fā)生直接執(zhí)行sql語句的注入問題
3. 即使用非預(yù)編譯的sql 也有周邊工具防止注入
工具就自己找吧,多的是。如 java 的 mybatis 的 sql類,xml中的#{},go語言內(nèi)置庫中的多參數(shù) exec 方法等等
4
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答