2017-02-24 47 views
-3

我发现,我5岁的站点表中的所有数据突然被混合起来 一些数据通过任何现有的SP被更新,不能更新。有人注射到我的网站和我的网站上运行的更新脚本

漫长的寻找藻后,我来的结论,有人与我的网站搞乱。 我假设它通过sql注入完成。

我有我的网站上24/7,网站TRAFIC的大量有100多页,而现在的日志只是显示哪些用户输入的内容页...更多日志将更加减慢网站。所以现在我需要高效行事。

1.什么是寻找某人注射的最佳方式 2.如何记录他的ip和注射时间 从未这样做过,在google上阅读了很多不同的意见。请咨询您的最佳做法。

+1

只需登录将数据库中的查询。然后在一天结束时滚动查看是否有任何奇怪的查询。 –

+0

每天有超过20000个查询和注射液,每 – Alexxx

+0

天没有发生收集日志中的所有查询Luud说,再添加一个更新触发器已被篡改至少一个表,插入时间戳行成一个记录表。这样你就知道要在哪里搜索日志。 – Cyrus

回答

0

而不是跟踪“坏人”你应该专注于恢复你的数据库,并使你的代码抵抗或无懈可击的注射,不知道什么是最好的方式为asp.net,但在java中,众所周知,准备好的语句使得有人不可能对你的数据进行sql注入。

看看这个链接,如何提高在asp.net代码: Classic ASP SQL Injection Protection

+2

我不同意。在确定攻击者的行为方式和注入方式之前,确定它来自哪里是个好主意。 –

+0

@LuudvanKeulen在此期间,让您的系统全面开放以进行其他攻击?同意,记录可疑的查询是有道理的,但修复SQL注入漏洞应该是最重要的恕我直言。 –

0

这是一些代码,我用我的网页上为“一网打尽”为通过查询字符串注入尝试尝试(即通过URL发送数据):

trap = 0 
ref = lcase(request.querystring) 

if ref <> "" then 
badChars = array("OR 1=1", "select", "drop", "shutdown", "--", "insert", "delete", "waitfor", "union", "0x31", "convert", "truncate", "sysobjects") 
cn = 0 
for i = 0 to uBound(badChars) 
if instr(ref,badchars(i)) > 1 then cn=cn+1 
next 
if cn >=2 then trap = 1 
end if 

if trap = 1 then .... ban user ip code here 

你可以简单地说:“如果陷阱= 1到Response.End则”,这将阻止页面上的任何进一步行动。我宁愿禁止一小时的IP。

这应该也适用于表单输入的request.form。

您可能还需要净化你的变量采取的形式输入。

data=request.form("emailaddress") 
data = replace(data,"'","") 
data = replace(data,"union","") 

+0

使用黑名单,以防止SQL注入是远远不够的 - MS自己也建议反对这一自2005年以来至少: “使用的不可接受的字符列表相关的潜在风险是,它总是可以忽略不可接受的字符定义时列表;另外,不可接受的字符可以用替代格式表示以通过验证。“,请参阅https://msdn.microsoft.com/en-us/library/ff648339.aspx –

+0

只是为了证明我的观点:您错过了'MERGE'声明。 –

+0

它可以很容易地包含到数组中。 该函数也可以用于窗体和查询字符串。 它仍然允许人们使用的表单数据的字(如“米字旗”或“心合并”,但两个关键字的组合,将触发警报。 – 2017-02-26 16:47:43