{eval=Array;=+count(Array);}
1.凡事涉及到用戶輸入操作的必須前后端檢驗,盡可能限制輸入的范圍,例如排除特殊字符
2. 數據庫必須只能內網訪問,涉及到sql操作必須使用預編譯,防止sql直接提交到數據庫,例如mybatis的#占位符,而不是$
3. 鑒權:所有涉及到面向客戶的操作須鑒權,防止出現暴力破解情況,核心接口可做訪問統計,限流控制,錯誤信息個性化定制,不暴露內部信息,一般使用內部約定的錯誤碼等形式
1. 能不用sql語句就不用
比如很多orm 框架或庫都將sql語句操作隱藏起來了,你直接 new 一個對象,然后insert. 或 update. 從數據庫取出來也是一個對象。
2. 非要用sql,盡量用預編譯
預編譯的流程是先預編譯,然后綁定執行。 綁定時不會發生直接執行sql語句的注入問題
3. 即使用非預編譯的sql 也有周邊工具防止注入
工具就自己找吧,多的是。如 java 的 mybatis 的 sql類,xml中的#{},go語言內置庫中的多參數 exec 方法等等
4
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答