到底什麼是sql注入,jdbc用 做引數為什麼就可以防止注入

時間 2021-06-09 17:03:01

1樓:飛鳥

你要登陸支付寶,輸入你的賬號abc,密碼123,提交。

後台的程式碰巧是實習生寫的。程式收到這兩個字串,放在$loginname 和$password 變數裡,然後向資料庫傳送了這麼一條sql:

select userid from users where (loginname='$loginname') and (password='$password')

資料庫收到的語句是:

select userid from users where (loginname='abc') and (password='123')

如果這個語句返回了值,說明登陸密碼對了。如果沒返回值,那說明密碼錯了。

實習生認為登陸任務完成的很好。

然後你的前同事,知道你的賬號是abc,但不知道你的密碼。Ta把密碼輸成了這個:1' or '1

於是實習生的程式,向資料庫提交了這麼一條語句

select userid from users where (loginname='abc') and (password='1' or '1')

資料庫老老實實返回了你的賬戶資訊,前同事登陸成功了。

每個資料庫,為了防止這種惡意攻擊拼接型的sql(SQL注入),都提供了變數繫結方法,jdbc(或任何乙個類似介面)的?也是它自己的變數繫結功能。

所謂的變數繫結,會把?號裡對應的變數值,強制轉義。(不是把變數直接拼接到sql,而是轉義後再拼接到sql)。

對於你前同事輸入的密碼,裡面那個',資料庫會把它認定是字元',而不是表示字串的外面的那個'。所以你如果用jdbc的?來接收這兩個變數,資料庫收到的語句是這樣的:

select userid from users where (loginname='abc') and (password='1\' or \'1')

密碼裡面那個'被強制轉義了,這樣,就不會因為前台亂輸入把sql結構破壞掉了。

sql注入到底要學什麼?

F0rmat 首先你要具備SQL命令的基礎,資料庫的基本操作,還有Http的基礎知識。下面可以通過Audi 1 sqli labs來練習 Mr.96 你要搞懂原理而不是記錄怎麼怎麼搞 教程裡面加 and 1 1加 都是sql語句,引數未經過過濾就帶入資料庫執行了。and 1 1 是成立的為 true...

知乎的編輯器是如何做 SQL 注入和 XSS 的防護的?

梁丞胤 熊貓俠 sql注入 預處理完美解決 XSS 不能使用html標籤就沒有xss的可能,既不能css樣式攻擊也不能js指令碼攻擊。使用bbcode markdown類似,符合格式的轉為html,不符合格式的直接轉為html實體 過濾高風險標籤,如script a img等,允許某一些低風險的標籤...

Hadoop到底是幹什麼用的?

Hadoop 是用來代替 Excel 的。乙個個體戶可以用 Excel 來記錄資料 分析資料 共享資料。乙個稍大一點的公司就需要用 Hadoop 來幹同樣的事,因為資料量比較大Excel搞不定。 小術曉術 Hadoop依賴MapReduce計算模型及HDFS Hadoop Distributed F...