記一次成功的sql注入入侵檢測附帶sql性能優化S
導讀:2SEO優化很多同學和園友都遇到過sql注入的,其中大部分都是代碼的不嚴謹造成的,都是犯過很多錯誤才學會認真起來網站建設高端網站建設。
但是如果是讓你接手一個二等殘廢的網站,并讓你在上面改版,而且不能推翻式改版,只能逐步替換舊的程序,那么你會非常痛苦,例如我遇到的問題: 問題1. 老板對你說,以前剛做完網站好好了,沒有出現木馬,怎么你來了,就會出現木馬,先別說了,趕緊解決問題,我徹底無語,但是如果爭吵,其實證明你和老板一樣無知,拿出證據和事實分析來讓公司其他稍微懂技術的一起來證明,公司網站被掛馬不是你來了的錯。 如是我通過網站目錄仔細排查將通過fck上傳的網馬刪除并修補fck的上傳漏洞并記下了這篇 Fckeditor使用筆記 ,其實很多人都遇到過,也解決過,都是小問題,但是讓你老板明白比解決漏洞問題更蛋疼,我那解釋的叫一個汗啊,恨不得把公司所有稍微懂點技術的都叫上讓他們看什么是大馬什么是小馬,然后演示怎么上傳木馬,奶奶的,黑客教程普及啊。 問題2. 網站又出現問題,上次的問題解決了不過兩個月,網站又被入侵掛馬,如是老板這次再說因為我來了才出問題,立馬走人,這就是為什么不能更不懂技術的人硬碰硬,更不能和你的老板來說,說了你又不懂。 但是要命的是網站是以前的技術開發的二等殘廢,在別個的cms上修改的,我必須保證網站在的開發的同時舊的模塊還可以使用,通過逐步更新的方法將網站底層翻新,但是那么多頁面,你很難一個一個去檢測那個頁面有漏洞,如是寫出下面的檢測代碼,沒想到這么簡單的就搞定了,并且可以通過此方法優化你的sql。 第一步建立一個sql日志表
復制代碼 代碼如下:
CREATE TABLE [dbo].[my_sqllog]( [id] [bigint] IDENT網站建設ITY(1,1) NOT NULL, [hit] [bigint] NULL, [sqltext] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL, [paramdetails] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL, [begintime] [datetime] NULL, [endtime] [datetime] NULL, [fromurl] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL, [ip] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL, [lastelapsedtime] [bigint] NULL, CONSTRAINT [PK_my_sqllog] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY]
記錄sql語句、此sql語句被執行次數,參數及值,記錄開始時間,結束時間,來自哪個頁面,ip和此條語句執行時間(暫時沒用) 第二步在sqlhelper里寫記錄代碼 兩個方法本來可以寫成private的,但是此二等殘廢的網站其他地方用的別的sqlhelper類,就直接調用此處通過合理優化的sqlhelper類的方法了。 代碼1:插入日志復制代碼 代碼如下:
public static int ExecuteSqlLog(CommandType commandType, string commandText, params DbParameter[] cmdParams) { #region 參數處理 string colums = ""; string dbtypes = ""; string values = ""; string paramdetails = ""; if (cmdParams != null && cmdParams.Length > 0) { foreach (DbParameter param in cmdParams) { if (param == null) { continue; } colums += param.ParameterName + " "; dbtypes += param.DbType + " "; values += param.Value + ";"; } paramdetails = string.Format(" {0},{1},{2}", colums, dbtypes, values); } string fromurl = ""; if (System.Web.HttpContext.Current!=null) { fromurl = System.Web.HttpContext.Current.Request.Url.ToString(); } // commandText = commandText.Replace("'","‘").Replace(";",";"); SqlParameter[] parameters = new SqlParameter[] { new SqlParameter("@hit",1), new SqlParameter("@sqltext",commandText), new SqlParameter("@paramdetails",paramdetails), new SqlParameter("@begintime",DateTime.Now), new SqlParameter("@endtime",DateTime.Now), new SqlParameter("@fromurl",fromurl), new SqlParameter("@ip",Web.Preseo網站關鍵詞優化ssRequest.GetIP()), new SqlParameter("@lastelapsedtime",0), }; #endregion using (DbConnection connection = Factory.CreateConnection()) { connection.ConnectionString = GetRealConnectionString(commandText);//ConnectionString; string sql = ""; // 執行DbCommand命令,并返回結果. int id = Utils.TypeConverter.ObjectToInt(ExecuteScalarLog(CommandType.Text, "select top 1 id from my_sqllog where sqltext=@sqltext", new SqlParameter("@sqltext", commandText))); if (id網站推廣優化seo > 0) { sql = "update my_sqllog set hit=hit+1,ip=@ip,endtime=@endtime,fromurl=@fromurl whereinsert into my_sqllog(hit,sqltext,paramdetails,begintime,endtime,fromurl,ip,lastelapsedtime) values(@hit,@sqltext,@paramdetails,@begintime,@endtime,@fromurl,@ip,@lastelapsedtime)"; } // 創建DbCommand命令,并進行預處理 DbCommand cmd = Factory.CreateCommand(); bool mustCloseConnection = false; PrepareCommand(cmd, connection, (DbTransaction)null, commandType, sql, parameters, out mustCloseConnection); // 執行DbCommand命令,并返回結果. int retval = cmd.ExecuteNonQuery(); // 清除參數,以便再次使用. cmd.Parameters.Clear(); if (mustCloseConnection) connection.Close(); return retval; } }
聲明: 本文由我的SEOUC技術文章主頁發布于:2023-05-21 ,文章記一次成功的sql注入入侵檢測附帶sql性能優化S主要講述性能,標簽,記一次成功的sql注入入侵檢測附帶sq網站建設源碼以及服務器配置搭建相關技術文章。轉載請保留鏈接: http://www.bifwcx.com/article/seo_3756.html