當前位置:首頁 » 編程語言 » 防sql注入過濾器

防sql注入過濾器

發布時間: 2022-09-10 11:38:59

Ⅰ 如何手動繞過sql注入過濾器

開始。運行.services.msc,服務管理的,這么多服務,那如何找到那個才是呢,
那可以去運行VM虛擬機,會提某某服務被禁用,請開啟的字樣,那首字母按下即可。

Ⅱ jsp怎樣寫防sql注入。就是注冊的時候不能輸入<input type="">這樣的東西

public static String asHTML(String text) { if (text == null) return ""; StringBuffer results = null; char[] orig = null; int beg = 0, len = text.length(); for (int i = 0; i < len; ++i) { char c = text.charAt(i); switch (c) { case 0: case '&': case '<': case '>': case '"': if (results == null) { orig = text.toCharArray(); results = new StringBuffer(len + 10); } if (i > beg) results.append(orig, beg, i - beg); beg = i + 1; switch (c) { default: // case 0: continue; case '&': results.append("&"); break; case '<': results.append(">"); break; case '>': results.append("<"); break; case '"': results.append("\""); break; } break; } } if (results == null) return text; results.append(orig, beg, len - beg); return results.toString(); } 將特殊的符號都替換掉就可以了也可以判斷有特殊符號就不讓提交

Ⅲ 如何使用HttpMole實現sql防注入

sql注入是被談的很多的一個話題,有很多的方法能夠實現sql的防注入,在這里就簡單說一下如果使用HttpMole來實現sql的防注入。
在項目中添加一個類讓其實現IHttpMole介面。IHttpMole介面有兩個方法 Init 和 Dispose。然後在Init方法中來訂閱
AcquireRequestState事件。
public void Dispose()
{

}

public void Init(HttpApplication context)
{
//Begin_Request時還沒有載入Session狀態
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
為什麼是AcquireRequestState 事件而不是Begin_Request呢 ,因為在Begin_Request執行的時候還沒有載入session狀態,而在處理的時侯可能會用到session。
在AcquireRequestState 事件中我們就要進行相應的處理了,思路如下,一般網站提交數據只有兩個地方,表單和url,所以就在該事件中將從這兩處提交的數據截取,判斷是否有一些危險字元,然後做相應處理。代碼如下
private void context_AcquireRequestState(object sender, EventArgs e)
{
HttpContext context = ((HttpApplication)sender).Context;

try
{
string getkeys = string.Empty;
string sqlErrorPage = "~/Error.aspx";//轉向的錯誤提示頁面
string keyvalue = string.Empty;

string requestUrl = context.Request.Path.ToString();
//url提交數據
if (context.Request.QueryString != null)
{
for (int i = 0; i < context.Request.QueryString.Count; i++)
{
getkeys = context.Request.QueryString.Keys[i];
keyvalue = context.Server.UrlDecode(context.Request.QueryString[getkeys]);

if (!ProcessSqlStr(keyvalue))
{
context.Response.Redirect(sqlErrorPage);
context.Response.End();
break;
}
}
}
//表單提交數據
if (context.Request.Form != null)
{
for (int i = 0; i < context.Request.Form.Count; i++)
{
getkeys = context.Request.Form.Keys[i];
keyvalue = context.Server.HtmlDecode(context.Request.Form[i]);//[getkeys];
if (getkeys == "__VIEWSTATE") continue;
if (!ProcessSqlStr(keyvalue))
{
context.Response.Redirect(sqlErrorPage);
context.Response.End();
break;
}
}
}
}
catch (Exception ex)
{
}
}
上面的代碼只是做了簡單的處理,當然也可以在事件中將輸入非法關鍵字的用戶ip ,操作頁面的url,時間等信息記錄在資料庫中或是記錄在日誌中。
而且還用到了一個叫ProcessSqlStr的方法,這個方法就是用來處理字元串的,判斷是否合法,如下
private bool ProcessSqlStr(string str)
{
bool returnValue = true;
try
{
if (str.Trim() != "")
{
//string sqlStr = ConfigurationManager.AppSettings["FilterSql"].Trim();
string sqlStr = "declare |exec|varchar|cursor|begin|open |drop |creat |select |truncate";

string[] sqlStrs = sqlStr.Split('|');
foreach (string ss in sqlStrs)
{
if (str.ToLower().IndexOf(ss) >= 0)
{
m_sqlstr = ss;
returnValue = false;
break;
}
}
}
}
catch
{
returnValue = false;
}
return returnValue;
}
到這兒類就寫好了,再在web.config中做相應的配置就大功告成
<httpMoles>
<add type="HttpMole" name="HttpMole"/>
</httpMoles>
用這種方法很方便,只需在這一處做處理,全站都能應用到,不過如果一個用戶想用varchar 等sql的關鍵字來做用戶名注冊的話也會被擋掉,不過應該沒有人這么無聊吧,呵呵

Ⅳ c#SQL防注入過濾函數疑問!

首先我們先了解為何會出現sql注入攻擊
那是因為用戶傳入字元串
然後我們將某些字元串作為參數傳給方法。
然後拼接字元串產生的。
而這些字元串,大多情況下由於存在特殊的符號比如『單引號,或者一些其他的符號。
對於這些參數,我建議使用SqlParameter[]
而不是直接拼接字元串。
這樣可以解決大部分的sql注入。

Ⅳ j2ee怎麼防止sql注入

開發web的過程中,需要防範sql注入,或是javascript代碼注入,以下通過過濾器(filter)實現的,只實現了tomcat和weblogic下,其它應用伺服器可以參照實現即可。
非常簡單只需三個步驟:
第一步,在你的工程加入如下所示的過濾器代碼,一共兩個類:

CharFilter.java

[java] view plain
package com.hyjx.filter;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

/**
* @author jfish
* @since 2006.1.12
*/
public class CharFilter implements Filter {

public FilterConfig config;
public void setFilterConfig(FilterConfig config) {
this.config = config;
}
public FilterConfig getFilterConfig() {
return config;
}

public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;

boolean filter = true;// 是否過濾;
String excludeURL;// 不過濾的url地址
excludeURL = config.getInitParameter("excludeURL");
if (excludeURL == null || "".equals(excludeURL)) {
filter = true;
} else {
String url = req.getRequestURI();// url地址
String[] excludeURLA = excludeURL.split(",");
for (int i = 0; i < excludeURLA.length; i++) {
if (url.indexOf(excludeURLA[i]) > 0) {// 如果含有不讓過濾的url地址則不過濾。
filter = false;
}
}
}
//得到應用伺服器類型
String appServer = config.getInitParameter("appServer");

if(filter)//需要過濾
{
if("tomcat".equals(appServer))//應用伺服器為tomcat時則:
{
if(checkTomcat(req,res))
{
String webapp = req.getContextPath();
res.sendRedirect(webapp + "/charError/charError.html");
}
else
{
chain.doFilter(request, response);
}
}
else//應用伺服器為weblogic時則:
{
Map m = req.getParameterMap();
if(req instanceof ParameterRequestWrapper) {
m = ((ParameterRequestWrapper)req).getSuperRequest().getParameterMap();
req = ((ParameterRequestWrapper)req).getSuperRequest();
}
//System.out.println(((String[])m.get("op"))[0] + "-----------" + req.getParameter("op"));
ParameterRequestWrapper wrapRequest=new ParameterRequestWrapper(req, m);
if(checkWeblogic(wrapRequest, res))
{
String webapp = req.getContextPath();
res.sendRedirect(webapp + "/charError/charError.html");
}
else
{
chain.doFilter(wrapRequest, response);
}
}

}
else//不需要過濾
{
chain.doFilter(request, response);
}
}

public boolean checkWeblogic(HttpServletRequest req, HttpServletResponse response) {

Map map = req.getParameterMap();

Set set = map.entrySet();
//request中的參數設置
boolean bl = false;
if (map != null) {
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry entry = (Entry) it.next();
if (entry.getValue() instanceof String[]) {
String[] values = (String[]) entry.getValue();
for (int i = 0; i < values.length; i++) {
//替換成全形字元。
values[i] = getQjString(values[i]);
//是否包含有特殊字元
if (getCheckString(values[i])) {
return true;
}

}
}
}
}

//cookie過濾:除了JSESSIONID以外的cookie進行過濾
Cookie[] cookies = req.getCookies();
String cookieName = "";
String cookieValue="";
if(cookies!=null)
{
for (int i = 0; i < cookies.length; i++)
{
Cookie c = cookies[i];
cookieName = c.getName();
//System.out.println("=======cookie:"+cookieName);
if(cookieName!= null && !"JSESSIONID".equals(cookieName.toUpperCase()))
{
cookieValue = c.getValue();
if (getCheckString(cookieValue)) {
return true;
}
//進行特殊字元替換
cookieValue = getQjString(cookieValue);
c.setValue(cookieValue);
response.addCookie(c) ;

}

}
}

return bl;

}

public boolean checkTomcat(HttpServletRequest req, HttpServletResponse response) {

Map map = req.getParameterMap();
//運用反射機制,讓其可修改。
try
{
Method method=map.getClass().getMethod("setLocked",new Class[]{boolean.class});
method.invoke(map,new Object[]{new Boolean(false)});
}
catch(Exception e)
{
e.printStackTrace();
}

Set set = map.entrySet();

boolean bl = false;
if (map != null) {
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry entry = (Entry) it.next();
if (entry.getValue() instanceof String[]) {
String[] values = (String[]) entry.getValue();
for (int i = 0; i < values.length; i++) {
//替換成全形字元。
values[i] = getQjString(values[i]);
//是否包含有特殊字元
if (getCheckString(values[i])) {
return true;
}

}
}
}
}

//cookie過濾:除了JSESSIONID以外的cookie進行過濾
Cookie[] cookies = req.getCookies();
String cookieName = "";
String cookieValue="";
if(cookies!=null)
{
for (int i = 0; i < cookies.length; i++)
{
Cookie c = cookies[i];
cookieName = c.getName();
//System.out.println("=======cookie:"+cookieName);
if(!"JSESSIONID".equals(cookieName))
{
cookieValue = c.getValue();
if (getCheckString(cookieValue)) {
return true;
}
//進行特殊字元替換
cookieValue = getQjString(cookieValue);
c.setValue(cookieValue);
response.addCookie(c) ;

}

}
}
return bl;
}
//特殊符號替換成全形.
/*
單引號'
雙引號"
小於號<
大於號>
分號;
等號=
注釋符--

Ⅵ sql注入如何防止

1、使用參數化篩選語句

為了防止SQL注入,用戶輸入不能直接嵌入到SQL語句中。相反,用戶輸入必須被過濾或參數化。參數語句使用參數,而不是將用戶輸入嵌入語句中。在大多數情況下,SQL語句是正確的。然後,用戶輸入僅限於一個參數。

一般來說,有兩種方法可以確保應用程序不易受到SQL注入攻擊。一種是使用代碼審查,另一種是強制使用參數化語句。強制使用參數化語句意味著在運行時將拒絕嵌入用戶輸入中的SQL語句。但是,目前對此功能的支持不多。

2、避免使用解釋程序,這是黑 客用來執行非法命令的手段。

3、防止SQL注入,但也避免一些詳細的錯誤消息,因為黑客可以使用這些消息。標準的輸入驗證機制用於驗證所有輸入數據的長度、類型、語句和企業規則。

4、使用漏洞掃描工具。

但是,防範SQL注入攻擊是不夠的。攻擊者現在自動搜索和攻擊目標。它的技術甚至可以很容易地應用於其他Web體系結構中的漏洞。企業應該投資於專業的漏洞掃描工具,如著名的Accunetix網路漏洞掃描程序。完美的漏洞掃描器不同於網路掃描器,它專門在網站上查找SQL注入漏洞。最新的漏洞掃描程序可以找到最新發現的漏洞。

5、最後,做好代碼審計和安全測試。

Ⅶ 如何防止SQL注入,並通過腳本來過濾SQL中注入的字元

如果您通過網頁獲取用戶輸入的數據並將其插入一個MySQL資料庫,那麼就有可能發生SQL注入安全的問題。
本章節將為大家介紹如何防止SQL注入,並通過腳本來過濾SQL中注入的字元。
http://e.cnzz.cn/201509/96863872.shtml

php 關於thinkphp的防sql注入跟過濾問題

防止SQL注入
opensns
對於WEB應用來說,SQL注入攻擊無疑是首要防範的安全問題,系統底層對於數據安全方面本身進行了很多的處理和相應的防範機制,例如:
$User = M("User"); // 實例化User對象
$User->find($_GET["id"]);
即便用戶輸入了一些惡意的id參數,系統也會強制轉換成整型,避免惡意注入。這是因為,系統會對數據進行強制的數據類型檢測,並且對數據來源進行數據格式轉換。而且,對於字元串類型的數據,ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string)。
通常的安全隱患在於你的查詢條件使用了字元串參數,然後其中一些變數又依賴由客戶端的用戶輸入,要有效的防止SQL注入問題,我們建議:
查詢條件盡量使用數組方式,這是更為安全的方式;
如果不得已必須使用字元串查詢條件,使用預處理機制(3.1版本新增特性);
開啟數據欄位類型驗證,可以對數值數據類型做強制轉換;(3.1版本開始已經強制進行欄位類型驗證了)
使用自動驗證和自動完成機制進行針對應用的自定義過濾;
欄位類型檢查、自動驗證和自動完成機制我們在相關部分已經有詳細的描述。
查詢條件預處理
where方法使用字元串條件的時候,支持預處理(安全過濾),並支持兩種方式傳入預處理參數,例如:
$Model->where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))->select();
或者
$Model->where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)->select();
模型的query和execute方法 同樣支持預處理機制,例如:
$model->query('select * from user where id=%d and status=%d',$id,$status);
或者
$model->query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。

Ⅸ java防止SQL注入的幾個途徑

  • java防SQL注入,最簡單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因為在原有SQL語句中加入了新的邏輯,如果使用PreparedStatement來代替Statement來執行SQL語句,其後只是輸入參數,SQL注入攻擊手段將無效,這是因為PreparedStatement不允許在不同的插入時間改變查詢的邏輯結構,大部分的SQL注入已經擋住了,在WEB層我們可以過濾用戶的輸入來防止SQL注入比如用Filter來過濾全局的表單參數

  • 01importjava.io.IOException;

  • 02importjava.util.Iterator;

  • 03importjavax.servlet.Filter;

  • 04importjavax.servlet.FilterChain;

  • 05importjavax.servlet.FilterConfig;

  • 06importjavax.servlet.ServletException;

  • 07importjavax.servlet.ServletRequest;

  • 08importjavax.servlet.ServletResponse;

  • 09importjavax.servlet.http.HttpServletRequest;

  • 10importjavax.servlet.http.HttpServletResponse;

  • 11/**

  • 12*通過Filter過濾器來防SQL注入攻擊

  • 13*

  • 14*/

  • {

  • 16privateStringinj_str="'|and|exec|insert|select|delete|update|count|*|%

  • |chr|mid|master|truncate|char|declare|;|or|-|+|,";

  • =null;

  • 18/**

  • 19*?

  • 20*/

  • 21protectedbooleanignore=true;

  • 22publicvoidinit(FilterConfigconfig)throwsServletException{

  • 23this.filterConfig=config;

  • 24this.inj_str=filterConfig.getInitParameter("keywords");

  • 25}

  • 26publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,

  • 27FilterChainchain)throwsIOException,ServletException{

  • 28HttpServletRequestreq=(HttpServletRequest)request;

  • 29HttpServletResponseres=(HttpServletResponse)response;

  • 30Iteratorvalues=req.getParameterMap().values().iterator();//獲取所有的表單參數

  • 31while(values.hasNext()){

  • 32String[]value=(String[])values.next();

  • 33for(inti=0;i<value.length;i++){

  • 34if(sql_inj(value[i])){

  • 35//TODO這里發現sql注入代碼的業務邏輯代碼

  • 36return;

  • 37}

  • 38}

  • 39}

  • 40chain.doFilter(request,response);

  • 41}

  • 42publicbooleansql_inj(Stringstr)

  • 43{

  • 44String[]inj_stra=inj_str.split("\|");

  • 45for(inti=0;i<inj_stra.length;i++)

  • 46{

  • 47if(str.indexOf(""+inj_stra[i]+"")>=0)

  • 48{

  • 49returntrue;

  • 50}

  • 51}

  • 52returnfalse;

  • 53}

  • 54}

  • 也可以單獨在需要防範SQL注入的JavaBean的欄位上過濾:

  • 1/**

  • 2*防止sql注入

  • 3*

  • 4*@paramsql

  • 5*@return

  • 6*/

  • (Stringsql){

  • 8returnsql.replaceAll(".*([';]+|(--)+).*","");

  • 9}

Ⅹ SQL注入怎麼防範

SQL注入攻擊的危害很大,而且防火牆很難對攻擊行為進行攔截,主要的SQL注入攻擊防範方法,具體有以下幾個方面:
1、分級管理
對用戶進行分級管理,嚴格控制用戶的許可權,對於普通用戶,禁止給予資料庫建立、刪除、修改等相關許可權,只有系統管理員才具有增、刪、改、查的許可權。
2、參數傳值
程序員在書寫SQL語言時,禁止將變數直接寫入到SQL語句,必須通過設置相應的參數來傳遞相關的變數。從而抑制SQL注入。數據輸入不能直接嵌入到查詢語句中。同時要過濾輸入的內容,過濾掉不安全的輸入數據。或者採用參數傳值的方式傳遞輸入變數,這樣可以最大程度防範SQL注入攻擊。
3、基礎過濾與二次過濾
SQL注入攻擊前,入侵者通過修改參數提交and等特殊字元,判斷是否存在漏洞,然後通過select、update等各種字元編寫SQL注入語句。因此防範SQL注入要對用戶輸入進行檢查,確保數據輸入的安全性,在具體檢查輸入或提交的變數時,對於單引號、雙引號、冒號等字元進行轉換或者過濾,從而有效防止SQL注入。
當然危險字元有很多,在獲取用戶輸入提交參數時,首先要進行基礎過濾,然後根據程序的功能及用戶輸入的可能性進行二次過濾,以確保系統的安全性。
4、使用安全參數
SQL資料庫為了有效抑制SQL注入攻擊的影響。在進行SQLServer資料庫設計時設置了專門的SQL安全參數。在程序編寫時應盡量使用安全參數來杜絕注入式攻擊,從而確保系統的安全性。
5、漏洞掃描
為了更有效地防範SQL注入攻擊,作為系統管理除了設置有效的防範措施,更應該及時發現系統存在SQL攻擊安全漏洞。系統管理員可以采購一些SQL漏洞掃描工具,通過專業的掃描工具,可以及時的掃描到系統存在的相應漏洞。
6、多層驗證
現在的網站系統功能越來越龐大復雜。為確保系統的安全,訪問者的數據輸入必須經過嚴格的驗證才能進入系統,驗證沒通過的輸入直接被拒絕訪問資料庫,並且向上層系統發出錯誤提示信息。同時在客戶端訪問程序中驗證訪問者的相關輸入信息,從而更有效的防止簡單的SQL注入。但是如果多層驗證中的下層如果驗證數據通過,那麼繞過客戶端的攻擊者就能夠隨意訪問系統。因此在進行多層驗證時,要每個層次相互配合,只有在客戶端和系統端都進行有效的驗證防護,才能更好地防範SQL注入攻擊。
7、資料庫信息加密
傳統的加解密方法大致分為三種:對稱加密、非對稱加密、不可逆加密。

熱點內容
android智能機器人 發布:2025-01-12 19:41:49 瀏覽:56
小米civi如何刷純安卓系統 發布:2025-01-12 19:41:40 瀏覽:45
壓縮高櫃 發布:2025-01-12 19:41:37 瀏覽:330
騰訊雲購買後怎麼找到伺服器ip 發布:2025-01-12 19:41:37 瀏覽:826
android視頻資源 發布:2025-01-12 19:39:17 瀏覽:335
odoo源碼 發布:2025-01-12 19:29:28 瀏覽:629
教你如何讓網速不卡安卓手機 發布:2025-01-12 19:18:45 瀏覽:471
伺服器如何搭建文件 發布:2025-01-12 19:06:34 瀏覽:384
安卓設置許可權是什麼意思 發布:2025-01-12 19:05:59 瀏覽:160
自動編譯div 發布:2025-01-12 18:51:06 瀏覽:661