大家存在5點誤區:
1、sql注入比較難防,需要替換select,delete等一打字元
其實對於字元型替換再多都沒有替換單引號為兩個單引號來的好!對於數字型替換再多都沒有用,一定要型別轉換。
2、忽略dropdownlist傳來的東西
其實是不對的,一切客戶端的東西都是不可信任的,select下拉框也是!因為可以自己做乙個htm提交到伺服器。
3、access比sqlserver不安全
安全不安全關鍵看怎麼用,如果sqlserver還是像access一樣用,乙個sa帳戶的話,很明顯,sqlserver比access不安全,可以直接得到表名和欄位名!access反而倒安全點了,因為只能通過逐位猜解得到。
4、**沒有顯示出錯資訊就說明**是安全的
當有記錄的時候顯示記錄,沒有記錄的時候顯示找不到任何記錄,通過這兩種狀態就可以猜解欄位名了,所以網頁不出錯不能說明是安全的
5、忽略post提交的資訊
很多人對url上傳遞的東西過濾嚴格,對於post的東西不理不睬是不對的,post的東西更加容易被注入,因為一般字段比較多
在asp.net中強烈建議通過引數來實現sql而不是sql拼接,因為就算你每乙個都過濾百密難有疏
比如:
sqlconnection conn=
new"
conn
"]);
sqlcommand comm
=new
sqlcommand(
"update tb1 set vname=@vname,iage=@iage where id=@id
",conn);
sqlparameter parm1
=new
sqlparameter(
"@vname
",sqldbtype.nvarchar,
50);
parm1.value
=((textbox)e.item.findcontrol(
"name
")).text;
sqlparameter parm2
=new
sqlparameter(
"@iage
",sqldbtype.int);
parm2.value
=((textbox)e.item.findcontrol(
"age
")).text;
sqlparameter parm3
=new
sqlparameter(
"@id
",sqldbtype.int);
parm3.value
=this
.datagrid1.datakeys[e.item.itemindex];
comm.parameters.add(parm1);
comm.parameters.add(parm2);
comm.parameters.add(parm3);
conn.open();
comm.executenonquery();
conn.close();
這樣的**看起來舒服而且又安全,何樂不為?
有關sql注入
所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞的 上的資料庫,...
有關sql注入閒談
inband 資料經由sql 注入的通道取出,這是最直接的一種攻擊,通過sql注入獲取的資訊直接反映到應用程式的web頁面上 out of band 資料通過不同於sql 注入的方法獲得 譬如通過郵件等 推理 這種攻擊時說並沒有真正的資料傳輸,但攻擊者可以通過傳送特定的請求,重組返回的結果從而得到一...
論壇答疑點滴 有關sql注入
大家存在5點誤區 1 sql注入比較難防,需要替換select,delete等一打字元 其實對於字元型替換再多都沒有替換單引號為兩個單引號來的好!對於數字型替換再多都沒有用,一定要型別轉換。2 忽略dropdownlist傳來的東西 其實是不對的,一切客戶端的東西都是不可信任的,select下拉框也...