2012-11-30 29 views
1

我的客戶端數據庫被黑了。我正在嘗試重建數據。該網站使用SQL Server數據庫運行傳統的ASP。我相信我已經找到了黑客的弱點,並且現在已經取消了這個入口點。被黑客入侵的SQL Server數據庫需要正則表達式

數據庫中的每個文本列都附加了一些html標記和行內腳本/ js標記。

這裏是一個字段的一個示例:

all</title><script> 
    document.write("<style>.aq21{position:absolute;clip:rect(436px,auto,auto,436px);}</style>"); 
</script> 
<div class=aq21> 
    <a href=http://samedaypaydayloansonlineelqmt.com >same day payday loans online</a> 
    <a href=http://samedaypaydayloan 

該實施例爲在Users表中UserRights柱。初始值爲all,但您可以看到附加的鏈接。

我需要編寫一個正則表達式腳本,它將搜索數據庫中每個表的每列中的所有字段,並刪除此額外標記。

從本質上講,如果我嘗試匹配</table>,那麼字符串和追加的一切可以用一個空字符串代替。

所有這些附加字符串對於同一列中的每個字段都是相同的。但是,每個表中有多個列。

這是我迄今已做,更換被黑客入侵的一部分,而是一個漂亮的正則表達式可能會幫助我,雖然我的正則表達式的技能....好吸。

UPDATE [databasename.[db].[databasetable] 
set 
UserRights = replace(UserRights,'</title><script>document.write("<style>.aq21{position:absolute;clip:rect(436px,auto,auto,436px);}</style>");</script><div class=aq21><a href=http://samedaypaydayloansonlineelqmt.com >same day payday loans online</a><a href=http://samedaypaydayloan',''); 

任何正則表達式的幫助和/或提示將不勝感激。

+3

你確定,你不是試圖通過使用正則表達式來破解? ;-)正則表達式的第一印象是從未知/不可預知的....提取的東西....所以無論如何,你要刪除一些不好的東西,雖然... – bonCodigo

+0

大聲笑,不,我不想破解它。這是第二次屁股疼痛。首先我使用上面的SQL來修復它,但是這一次,我注意到所有添加的垃圾郵件都是隨機的。 – symfo

+0

如果你有**備份** :)這次在入侵者攻擊後有備份的計劃嗎? :D – bonCodigo

回答

2

既然壞的東西用<開始,這是一個不尋常的字符通常會發現,我會用普通的文本功能,這樣的事情:

update mytable set 
mycol = substr(mycol, 1, charindex('<', mycol) - 1) 
where mycol like '%<%'; 

,有條不紊地做這與每家每戶列表。

請注意,我只是猜測正確的函數使用,因爲我不熟悉SQL Server,但你有想法。

我歡迎有人編輯SQL來改進它。

+0

我會試試這個。讓你知道它是怎麼回事。 – symfo

+0

@ user1865092我只注意到查詢中的一個錯誤並修復了它。更好地檢查where子句是否像'%'%'' – Bohemian

+0

在我的情況中,上面的查詢沒有「編譯」,而是在原地保留了<<。這個修改過的解決方案爲我工作:'更新mytable set mycol = substring(mycol,1,charindex('<',mycol)-1)其中mycol像'%<%';'。 –

2

這是我落得這樣做(非常感謝@Bohemian):

我通過每個表去檢查過了哪一列受到影響。然後,我跑到每列下面的腳本:

UPDATE [tablename] 
set columnname = substring(columnname, 1, charindex('/', columnname)-1) 
where columnname like '%</%'; 

如果列在它有任何標記,然後我結束了手動手動更新這些記錄。 (幸運的是我只有幾條記錄)。

如果有人有更好的解決方案,請隨時發表評論。

謝謝!