回覆列表
  • 1 # 使用者3580241448097

    MySQL為例,現在專案大部分都用框架實現,比如MyBatis框架,輕量級,功能強大:

    在MyBatis中,如果寫${變數名},則為直接把傳入的值填充到SQL語句中;

    如果寫#{變數名},則為傳入的值只能作為值,放到SQL語句中。

    舉例:

    DELETE FROM student WHERE name=${stu_name}

    如果這樣寫,假如使用者惡意傳入這樣一個字串:abc OR 1=1,那麼整個SQL就變成了

    DELETE FROM student WHERE name=abc OR 1=1,結果就是全部資料都刪掉了。

    這就是SQL注入,如果把${stu_name}換成#{stu_name},那麼依然傳入上面的字串,那麼SQL是這樣的:DELETE FROM student WHERE name=`abc OR 1=1`,會刪除名字為abc OR 1=1的學生,沒有這個學生則什麼都刪除不掉,這樣就防止了SQL注入。

  • 中秋節和大豐收的關聯?
  • 長期股權投資的核算方法有哪些?各自的適用範圍是怎樣的?