javascriptsql注入
❶ egg.js會導致sql注入嗎
不會。
sql注入的檢測方法一般採取輔助軟體或網站平台來檢測,軟體一般採用sql注入檢測工具jsky,網站平台就有億思網站安全平台檢測工具。MDCSOFT SCAN等。採用MDCSOFT-IPS可以有效的防禦SQL注入,XSS攻擊等。
❷ 用js寫一個防sql注入的 函數,能起到效果嗎
防止sql注入攻擊,在資料庫方面,針對每一個表的增刪改,寫存儲過程,程序主要靠存儲過程操作數據。 在代碼中,個別特殊需要數據查詢的,如果不能通過存儲過程,那就盡量用傳參的方式,盡量不要拼接sql。 如果非要拼接,要對拼接字元串進行處理,Tools的如下字元串處理方法可以防止注入攻擊: /// /// 格式化文本(防止SQL注入) /// /// /// public static string AntiSQL(string html) { Regex regex一 = new Regex(@"<script[\s\S]+", RegexOptions.IgnoreCase); Regex regex二 = new Regex(@" href *= *[\s\S]*script *:", RegexOptions.IgnoreCase); Regex regex三 = new Regex(@" on[\s\S]*=", RegexOptions.IgnoreCase); Regex regex四 = new Regex(@"<iframe[\s\S]+", RegexOptions.IgnoreCase); Regex regex5 = new Regex(@"<frameset[\s\S]+", RegexOptions.IgnoreCase); Regex regex一0 = new Regex(@"select", RegexOptions.IgnoreCase); Regex regex一一 = new Regex(@"update", RegexOptions.IgnoreCase); Regex regex一二 = new Regex(@"delete", RegexOptions.IgnoreCase); html = regex一.Replace(html, ""); //過濾標記 html = regex二.Replace(html, ""); //過濾href=javascript: () 屬性 html = regex三.Replace(html, " _disibledevent="); //過濾其它控制項的on...事件 html = regex四.Replace(html, ""); //過濾iframe html = regex一0.Replace(html, "s_elect"); html = regex一一.Replace(html, "u_pudate"); html = regex一二.Replace(html, "d_elete"); html = html.Replace("'", "』"); html = html.Replace(" ", " "); return html;
❸ 簡單分析什麼是SQL注入漏洞
SQL是操作資料庫數據的結構化查詢語言,網頁的應用數據和後台資料庫中的數據進行交互時會採用SQL。
SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。它是利用現有應用程序,將惡意的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。
❹ SpringBoot 防止SQL注入、XSS攻擊、CSRF/CROS惡意訪問
一、SQL 注入問題
SQL 注入即是指 web 應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在 web 應用程序中事先定義好的查詢語句的結尾上添加額外的 SQL 語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙資料庫伺服器執行非授權的任意查詢,從而進一步得到相應的數據信息。
簡單來說,就是將大部分 SQL 語句當參數傳入系統中,從而獲取系統中的數據。下面簡單舉例說明
系統中有這樣一條信息 SQL 語句執行,分頁查詢所有用戶,每頁查詢 20 條,並且根據指定欄位進行排序,也就是說排序欄位也是參數傳遞過來的
SQL 注入問題分析:
這樣很簡單的一句話 SQL,就可以把系統搞炸掉,這種方式可以實現刪庫跑路
以上語句會把整個 test 資料庫所有內容都刪掉
盡量用預編譯機制,少用字元串拼接的方式傳參,它是 sql 注入問題的根源。
有些特殊字元,比如:%作為 like 語句中的參數時,要對其進行轉義處理。
需要對所有的異常情況進行捕獲,切記介面直接返回異常信息,因為有些異常信息中包含了 sql 信息,包括:庫名,表名,欄位名等。攻擊者拿著這些信息,就能通過 sql 注入隨心所欲地攻擊你的資料庫了。目前比較主流的做法是,有個專門的網關服務,它統一暴露對外介面。用戶請求介面時先經過它,再由它將請求轉發給業務服務。這樣做的好處是:能統一封裝返回數據的返回體,並且如果出現異常,能返回統一的異常信息,隱藏敏感信息。此外還能做限流和許可權控制。
使用 sqlMap 等待代碼檢測工具,它能檢測 sql 注入漏洞。
需要對資料庫 sql 的執行情況進行監控,有異常情況,及時郵件或簡訊提醒。
對生產環境的資料庫建立單獨的賬號,只分配 DML 相關許可權,且不能訪問系統表。切勿在程序中直接使用管理員賬號。
建立代碼 review 機制,能找出部分隱藏的問題,提升代碼質量。
對於不能使用預編譯傳參時,要麼開啟 druid 的 filter 防火牆,要麼自己寫代碼邏輯過濾掉所有可能的注入關鍵字。
XSS 攻擊通常指的是通過利用網頁開發時留下的漏洞,通過巧妙的方法注入惡意指令代碼到網頁,使用戶載入並執行攻擊者惡意製造的網頁程序。這些惡意網頁程序通常是 JavaScript,但實際上也可以包括 Java、 VBScript、ActiveX、 Flash 或者甚至是普通的 HTML。攻擊成功後,攻擊者可能得到包括但不限於更高的許可權(如執行一些操作)、私密網頁內容、會話和 cookie 等各種內容。
通常情況下,被用來盜用 Cookie、破壞頁面結構、重定向到其他網站等
對用戶輸入的表單信息進行檢測過濾
CSRF - Cross-Site Request Forgery - 跨站請求偽造:
攻擊可以在受害者毫不知情的情況下以受害者名義偽造請求發送給受攻擊站點,從而在未授權的情況下執行在許可權保護之下的操作,CORS - Cross Origin Resourse-Sharing - 跨站資源共享,惡意訪問內網敏感資源。
有效的解決辦法是通過多種條件屏蔽掉非法的請求,例如 HTTP 頭、參數等:
防止大規模的惡意請求,niginx 反向代理可以配置請求頻率,對 ip 做限制。nginx 可以很方便地做訪問控制,特別是一些偶發性的大量惡意請求,需要屏蔽處理。
屏蔽 ip 地址
屏蔽 user-agent
屏蔽代理 ip
有兩種情形會需要屏蔽代理 ip:一是代理 ip 訪問,二是負載均衡(real-ip 請求負載均衡伺服器,再代理給後端 server)
創建 包裝器,這是實現 XSS 過濾的關鍵,在其內重寫了 getParameter,getParameterValues,getHeader 等方法,對 http 請求內的參數進行了過濾
❺ 網站如何防SQL注入
分類: 電腦配輪晌/網路 >> 程序設計 >> 其他編程語言
問題描述:
小弟是新手,請大家提供些方法。
解析:
試試這兩種方法:
第一種:
squery=lcase(Request.ServerVariables("QUERY_STRING"))
sURL=lcase(Request.ServerVariables("HTTP_HOST"))
SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'||format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
For SQL_Data=0 To Ubound(SQL_inj)
if instr(squery&sURL,Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系統"桐雹
Response.end
end if
next
第二種:
SQL_injdata =":|;|>|<|--|sp_|xp_|\|dir|cmd|^|(|)|+|$|'||format|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系統"培鋒
Response.end
end if
next
Next
End If
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "SQL通用防注入系統"
Response.end
end if
next
next
end if
第三種
<%
'--------定義部份------------------
Dim Str_Post,Str_Get,Str_In,Str_Inf,Str_Xh,Str_db,Str_dbstr
'自定義需要過濾的字串,用 "■"分離
Str_In = "'■;■and■exec■insert■select■delete■update■count■*■%■chr■mid■master■truncate■char■declare"
'----------------------------------
%>
<%
Str_Inf = split(Str_In,"■")
'--------POST部份------------------
If Request.Form<>"" Then
For Each Str_Post In Request.Form
For Str_Xh=0 To Ubound(Str_Inf)
If Instr(LCase(Request.Form(Str_Post)),Str_Inf(Str_Xh))<>0 Then
'--------寫入資料庫----------頭-----
Str_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Str_db=Server.CreateObject("ADODB.CONNECTION")
Str_db.open Str_dbstr
Str_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Str_Post&"','"&replace(Request.Form(Str_Post),"'","''")&"')")
Str_db.close
Set Str_db = Nothing
'--------寫入資料庫----------尾-----
Response.Write "<Script Language=JavaScript>alert('請不要在參數中包含非法字元嘗試注入!');</Script>"
Response.Write "非法操作!系統做了如下記錄:<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:POST<br>"
Response.Write "提交參數:"&Str_Post&"<br>"
Response.Write "提交數據:"&Request.Form(Str_Post)
Response.End
End If
Next
Next
End If
'----------------------------------
'--------GET部份-------------------
If Request.QueryString<>"" Then
For Each Str_Get In Request.QueryString
For Str_Xh=0 To Ubound(Str_Inf)
If Instr(LCase(Request.QueryString(Str_Get)),Str_Inf(Str_Xh))<>0 Then
'--------寫入資料庫----------頭-----
Str_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Str_db=Server.CreateObject("ADODB.CONNECTION")
Str_db.open Str_dbstr
Str_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Str_Get&"','"&replace(Request.QueryString(Str_Get),"'","''")&"')")
Str_db.close
Set Str_db = Nothing
'--------寫入資料庫----------尾-----
Response.Write "<Script Language=JavaScript>alert('請不要在參數中包含非法字元嘗試注入!);</Script>"
Response.Write "非法操作!系統做了如下記錄:<br>"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作時間:"&Now&"<br>"
Response.Write "操作頁面:"&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式:GET<br>"
Response.Write "提交參數:"&Str_Get&"<br>"
Response.Write "提交數據:"&Request.QueryString(Str_Get)
Response.End
End If
Next
Next
End If
%>
第3中方法需要你自己建個資料庫表
❻ 菜鳥教程中的nodejs連接mysql資料庫教程存在sql注入問題嗎
是否有漏洞與代碼有關,與此無關
其中主流的連接MySQL的方式是用mysql或者mysql2包,它們只是提供了調用驅動的api。很多框架中包括egg,nest都是基於此封裝的。
但這不是SQL注入的關鍵,它只是一種連接方式。它只管連接,不管其他的,存不存在SQL注入完全靠寫代碼的人本身啊。
一句腳本本沒有問題(知道不讓直接放sql的,也是放注入),但是你如果讓SQL變成由用戶輸入拼接而成,那就存在SQL注入的風險。
你應該去了解SQL注入的原理,然後進行防患,網路就能找到,然後可以用ORM,一般都對輸入做了處理,還能避免直接寫SQL(但其實難的地方還得自己寫)。
有不理解可以追問。