成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是 SQL 注入,這些坑得避開

運維 數據庫運維
sql 注入就是用戶通過輸入的參數,拼接到原先的 sql 中,成為 sql 的一部分,從而影響 sql 的功能和執行結果

 [[425032]]

1、sql 注入是什么

sql 注入就是用戶通過輸入的參數,拼接到原先的 sql 中,成為 sql 的一部分,從而影響 sql 的功能和執行結果

2、sql 注入破壞力

-小兵破壞力

比如原先 sql 如下

  1. select * from user where name='用戶名' and password='密碼'

用戶輸入

  1. name:臻大蝦'-- '注釋 
  2. password:密碼 

那最終的結果猜猜是什么?

  1. select * from user where name='臻大蝦'-- '注釋' and password='密碼'

兩個-- 代表注釋,所以這條 sql 只需要輸入用戶名,就可以獲取用戶信息,跳過了密碼的校驗

-boss 破壞力

來個厲害的,比如用戶輸入以下參數

  1. name:臻大蝦 
  2. password:'; drop table user;-- '注釋 

最終的 sql:

  1. select * from user where name='臻大蝦' and password=''; drop table user;-- '注釋'

user 表居然被刪除了,看到這,此時的你可能想原地爆炸。

3、對策

3.1、PreparedStatement 預編譯

使用預編譯,這樣傳入的參數,會被當作字符串,也就是被引號包起來

拿剛才的例子,用戶輸入

  1. name:臻大蝦'-- '注釋 
  2. password:密碼 

如果使用了預編譯,那最終的 sql

  1. select * from user where name='臻大蝦\'-- \'注釋' and password='密碼'

參數中的引號被轉義,從而避免成為 sql 的一部分。

3.2、有些語句不能預編譯

預編譯獲取參數是根據#,而$ 是拼接的意思

#{}:解析為預編譯語句的一個參數占位符

${}:僅僅作為一個字符串,在動態 sql 中直接替換變量,傳入什么值,就是什么值

比如傳入:'臻大蝦' or 1=1

  1. 1、SELECT * FROM user WHERE name=#{name} //SELECT * FROM user WHERE name='\'臻大蝦\' or 1=1' 
  2. 2、SELECT * FROM user WHERE name=${name} //SELECT * FROM user WHERE name='臻大蝦' or 1=1 

但是有些情況使用#會報錯,比如 like、in 如果使用#會報錯,而使用

還有 order by,根據傳入的參數排序,這些情況就會有 sql 注入的危險,那怎么辦呢?

  • like

  1. select * from user where name like '%#{name}%' //會報錯 
  2. select * from user where name like '%${name}%' //正常 

正確寫法

使用 mysql 的字符串拼接函數 concat

  1. select * from user where name like concat('%',#{name},'%'
  • in

正確寫法,使用 foreach

  1. @Select("<script>" + 
  2.         "select * from user where id in "
  3.         "<foreach item='item' index='index' collection='userIds' open='(' separator=',' close=')'> " + 
  4.         "#{item}" + 
  5.         "</foreach>"
  6.         "</script>"
  7. List<User> getByIds(@Param("userIds") List<Long> userIds); 
  • order by

有時需要根據前端傳入的參數來排序,此時就會有 sql 注入的危險,此時可以使用白名單

比如

  1. List<String> allowSortColumnList= Lists.newArrayList("age","score"); 
  2. if(!allowSortColumnList.contains(sortParam)){ 
  3.     throw new RuntimeException("can not sort by "+sortParam); 

 

 

責任編輯:張燕妮 來源: 臻大蝦
相關推薦

2022-11-04 08:38:57

索引數據分庫

2024-05-30 19:01:53

AI技術大會

2018-09-11 08:05:44

千兆路由器廠商

2018-07-05 06:02:38

綜合布線弱電動力線

2021-09-07 14:35:48

DevSecOps開源項目

2021-05-18 08:02:40

面試面試問題職業規劃

2017-01-23 08:41:43

云計算

2024-08-26 15:31:55

2020-07-14 14:59:00

控制反轉依賴注入容器

2022-11-10 10:19:06

業務項目工具代碼

2018-10-31 11:30:28

Redis數據分布式鎖

2019-02-25 23:02:16

數據科學職業數據科學家

2010-12-20 16:04:30

2017-02-23 08:08:58

2021-08-19 07:34:55

RabbitMQLinuxWindows

2013-05-14 13:59:13

開發者廣告商廣告平臺

2023-06-12 07:00:40

Rust進度任務

2021-01-26 00:46:40

微服務架構微服務應用

2025-03-24 07:10:00

嚴格模式JavaScript代碼

2011-05-12 13:07:28

SQL Server復制漏洞
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91se在线 | 另类二区| 小视频你懂得 | 亚洲人在线观看视频 | 777毛片| 国产午夜精品久久久久 | 欧美激情久久久 | 不卡的av在线 | av一区在线| 亚洲欧美综合 | 亚洲视频免费观看 | 亚洲精品久久久久中文字幕欢迎你 | 91色视频在线观看 | 91精品国产综合久久国产大片 | 日本不卡一区 | 午夜精品久久久久久久久久久久久 | 伊人网站视频 | 美女视频久久 | 久久久久亚洲精品国产 | av香蕉| 免费观看成人鲁鲁鲁鲁鲁视频 | 性在线 | 性视频一区 | 男人天堂视频在线观看 | 国产精品a免费一区久久电影 | 久久夜视频 | 不卡视频一区 | 日韩不卡视频在线 | 午夜精品一区二区三区在线视频 | 色综合久久久久 | 成人精品系列 | 欧美激情在线精品一区二区三区 | 国产精品高清一区二区三区 | 欧美一区二区在线观看视频 | 精品国产欧美日韩不卡在线观看 | 国产一区二区三区四区五区3d | 精品欧美一区二区久久久伦 | 成人国产精品久久 | 午夜视频一区二区 | 国产成人精品在线 | 99热热热热|