建議程式裡的每一個 request 都要檢查後, 再放進去 database 裡做操作,
舉例, case 是畫面上有很多筆資料, 要整批做更新,
假設有一段 SQL command 要執行, 有人是直接醬子寫.
一般正常的操作流程下, 程式不會出問題, 但如果有人亂輸入內容, 程式就會發生 500 Error, 例如 user 輸入 &dir, 由於 Num 欄位和 Seq 欄位都是 int 型別, 所以輸竹了文字的資料, 就會發生錯誤:
將_nvarchar_值_'&dir'_轉換成資料類型_int_時,轉換失敗。
針對這個 case 要降低 500 Error 發生的機率, 請先把 request 到的資料, 放到變數裡, 先經過簡單的前置檢查後, 再把變數的內容放到 sql command 裡來執行, 建議的寫法如下:
我猜 input FORM 裡會輸入的資料, 大致上分成: 數字 和 文字2種,
數字的話, 使用 isNumeric() 應該就可以解決掉大部份的變數內容檢查,
文字的話, 建議先從 database 裡的 column 來限制收到的變數的長度, 最好可以再針對欄位內容做過濾, 像是不允許內容出現 SQL 指令, 和部份 stored procedure 指令.
沒有留言:
張貼留言