sql注入的發生,通常是惡意使用者通過在表單中填寫包含sql關鍵字的資料,來使資料庫執行非常規邏輯的過程。簡單來說,就是資料庫越界做了超出**控制範圍的事情。這個問題的**是,sql資料庫的操作是通過sql語句來執行的,而無論是執行**還是資料項都必須寫在sql語句之中,這就導致如果我們在資料項中加入了某些sql語句關鍵字(比如說select、drop等等),這些關鍵字就很可能在資料庫寫入或讀取資料時得到執行。
例:基於1 = 1 總為真
在下圖中,模擬一次簡單的使用者登入過程。
在正常情況下輸入的密碼為 password
在使用sql注入時 輸入的密碼為 "1" or "1" = "1"
那麼當我們未對引數做任何校驗時,直接將其拼接為sql語句
最終得到的sql語句為select * from user where username ="1" and password = "1" or "1" = "1"
此時,你去執行這句sql語句本應該是失敗的,卻因為誤判,返回了成功的指令。
使用正規表示式過濾傳入的引數
正規表示式:例如下列表示式,過濾掉有or和and的引數
private string checksql = 「^(.+)\sand\s(.+)|(.+)\sor(.+)\s$」;
利用orm框架防止sql注入
與傳統的orm框架不同,例mybatis使用xml描述符將物件對映到sql語句或者儲存過程中,這種機制可以讓我們更大的靈活度通過sql來運算元據庫物件,因此,我們必須小心這種便利下sql注入的可能性。
這是mybatis推薦的一種用法,注意引數符號#,使用#{}語法,mybatis會通過預編譯機制生成preparedstatement引數,然後在安全的給引數進行賦值操作,因此就避免了sql注入:例如下圖所示
字串過濾
比較簡單的乙個方法,過濾掉所有的sql引數,和正規表示式的效果一致
csrf(cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:csrf/xsrf。owasp top 10 2010排a5,owasp top 10 2013排a8。
攻擊者盜用了你的身份,以你的名義傳送惡意請求。csrf能夠做的事情包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私洩露以及財產安全
從上圖可以看出,要完成一次csrf攻擊,受害者必須依次完成兩個步驟:
加驗證碼
驗證碼,強制使用者必須與應用進行互動,才能完成最終請求。在通常情況下,驗證碼能很好遏制csrf攻擊。但是出於使用者體驗考慮,**不能給所有的操作都加上驗證碼。因此驗證碼只能作為一種輔助手段,不能作為主要解決方案。
referer check
referer check在web最常見的應用就是「防止盜鏈」。同理,referer check也可以被用於檢查請求是否來自合法的「源」(referer值是否是指定頁面,或者**的域),如果都不是,那麼就極可能是csrf攻擊。
但是因為伺服器並不是什麼時候都能取到referer,所以也無法作為csrf防禦的主要手段。但是用referer check來監控csrf攻擊的發生,倒是一種可行的方法。
增加token校驗
這個token的值必須是隨機的,不可**的。由於token的存在,攻擊者無法再構造乙個帶有合法token的請求實施csrf攻擊。另外使用token時應注意token的保密性,盡量把敏感操作由get改為post,以form或ajax形式提交,避免token洩露。
xss(cross site scripting)攻擊全稱跨站指令碼攻擊,xss是一種經常出現在web應用中的計算機安全漏洞,它允許惡意web使用者將**植入到提供給其它使用者使用的頁面中。
通俗的來說就是我們的頁面在載入並且渲染繪製的過程中,如果載入並執行了意料之外的程式或**(指令碼、樣式),就可以認為是受到了 xss攻擊。
反射型:
也叫非持久型xss,互動資料一般不會被存在資料庫裡面,一次性,所見即所得。一般xss**出現在請求url中,作為引數提交到伺服器,伺服器解析並響應,響應結果中包含xss**,最後瀏覽器解析並執行。
場景:儲存型:
也叫持久型xss,主要將xss**提交儲存在伺服器端(資料庫,記憶體,檔案系統等),下次請求目標頁面時不用再提交xss**。當目標使用者訪問該頁面獲取資料時,xss**會從伺服器解析之後載入出來,返回到瀏覽器做正常的html和js解析執行,xss攻擊就發生了。
場景:借助於**進行例子模擬
圖中例子說明
首先此題目意思是希望通過xss攻擊,將頁面調整第二道題目
使用innerhtml(原生)、v-html(vue)、dangerouslysetinnerhtml(react)等直接渲染html的函式渲染請求資料時,需要先把字串轉義:
例如:字元過濾:
1)過濾掉特殊的html標籤,例如
常見Web站點安全性問題
例子 其中page是傳入的引數,page的值為1,在伺服器進行處理時,可能會將page的值寫入sql中,比如 select from post where page 1 這樣就完成了一次查詢操作,並返回我們想要的值 但是若是進行非法操作比如 drop table post 那麼最後sql就變為 se...
安全性問題
更改預設密碼 大量關鍵資訊 金融的 市場的 私人的 難以置信地在 inter 上失竊,不僅因為不夠嚴密的安全體系結構,還因為不負責任地留下了資料庫和系統的預設安裝密碼。如果您不希望成為上述的一員,一定要更改 rdbms windows nt 計算機和其他資源中眾所周知的使用者預設登入密碼。檢查入口處...
前端安全性問題
csrf cross site request forgery 即跨站請求偽造是一種常見的web攻擊。攻擊原理 a 使用者開啟瀏覽器,訪問受信任 a,輸入使用者名稱和密碼請求登入 a b 在使用者資訊通過驗證之後,a產生cookie資訊並返回給瀏覽器,此時使用者登入 a成功,可以正常傳送請求到 a ...