|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。今天在网上看到一个防收罗软件,说收罗只会见以后网页,不会会见网页的图片、JS等,明天俄然想到,经由过程静态程序和Js会见分离纪录会见者的IP,然落后行IP判别,因为收罗历程不会会见JS,收罗的时分只会查到用静态程序纪录的IP,而不会有经由过程JS纪录的IP,从而完成网页程序的防收罗。防收罗的道理十分复杂,起首放一段静态语句,把会见者的IP到场到数据库的一个内外,然后在页面底部到场一个JS,JS间接会见静态页面,将会见者的IP到场到数据库的别的一个内外。再次会见的时分,从两个内外读IP数据,然后判别工夫差,假如只在第一个内外找到,在第二个内外找不到,大概工夫差凌驾10秒,则以为是收罗。
长处
1.部署复杂,只需是静态言语就可以很简单的完成,无需借助服务器端程序
2.杀伤力年夜,几近能封杀一切的收罗历程
弱点
1.第一个弱点仍是杀伤力年夜,假如必要实践利用必要思索一些特别情形,以避免误杀已杀失落搜刮爬虫
2.只合用于静态网页,静态页面就没法用了
流程写的对照乱,不外道理自己就不是很庞大,上面附上程序例子,懂ASP的应当很快就可以看懂。
本文由方卡在线(http://www.fangka.net/)原创,转载请说明出处。若有相同,纯属偶合!
程序例子(ASP+ACCESS)(测试程序下载):
1.创建数据库
表1:Ip1,字段Ip1_Adderss(文本),Ip1_Time(日期/工夫,默许值=Now())
表2:Ip2,字段Ip2_Adderss(文本),Ip2_Time(日期/工夫,默许值=Now())
2.Index.asp(仅静态代码,全体代码请见测试程序中)
<%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<%
DimConn,Rs,Sqlstr,Ip,IpTime,IpTime2,NewUser
NewUser=0
SetConn=Server.CreateObject("Adodb.Connection")
SetRs=Server.Createobject("Adodb.RecordSet")
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath("Data.mdb")
Conn.OpenConnStr
Ip=Request.ServerVariables("REMOTE_ADDR")
Sqlstr="Select*From[Ip1]WhereIp1_Address="&Ip&"OrderByIp1_IdDesc"
Rs.OpenSqlstr,Conn,1,3
IfRs.EofThen
NewUser=1
Application.Lock()
Rs.AddNew()
Rs("Ip1_Address")=Ip
Rs.Update()
Application.UnLock()
Else
IpTime=Rs("Ip1_Time")
Application.Lock()
Rs.AddNew()
Rs("Ip1_Address")=Ip
Rs.Update()
Application.UnLock()
EndIf
Rs.Close
IfNewUser=0Then
Sqlstr="Select*From[Ip2]WhereIp2_Address="&Ip&"OrderByIp2_IdDesc"
Rs.OpenSqlstr,Conn,1,3
IfRs.EofThen
Rs.Close
Response.Write("请勿收罗!")
Response.End()
Else
IpTime2=Rs("Ip2_Time")
IfDateDiff("s",IpTime2,IpTime)>10Then
Rs.Close
Response.Write("请勿收罗!")
Response.End()
EndIf
EndIf
Rs.Close
EndIf
%>
3.Js.asp
<%
DimConn,Rs,Sqlstr,Ip
SetConn=Server.CreateObject("Adodb.Connection")
SetRs=Server.Createobject("Adodb.RecordSet")
ConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath("Data.mdb")
Conn.OpenConnStr
Ip=Request.ServerVariables("REMOTE_ADDR")
Sqlstr="Select*From[Ip2]"
Rs.OpenSqlstr,Conn,1,3
Application.Lock()
Rs.AddNew()
Rs("Ip2_Address")=Ip
Rs.Update()
Application.UnLock()
Rs.Close
%>
4.Get.asp
<%@LANGUAGE="VBSCRIPT"CODEPAGE="936"%>
<%
Response.Write(Server.HTMLEncode(GetHttpPage("http://localhost/Index.asp","GB2312")))
==============================
函数名:GetHttpPage
作用:猎取页面源代码函数
参数:网址HttpUrl
==============================
FunctionGetHttpPage(HttpUrl,Code)
IfIsNull(HttpUrl)=TrueOrHttpUrl=""Then
GetHttpPage="A站点保护中!"
ExitFunction
EndIf
OnErrorResumeNext
DimHttp
SetHttp=server.createobject("MSX"&"ML2.XML"&"HTTP")
Http.open"GET",HttpUrl,False
Http.Send()
IfHttp.Readystate4then
SetHttp=Nothing
GetHttpPage="B站点保护中!"
Exitfunction
Endif
GetHttpPage=BytesToBSTR(Http.responseBody,Code)
SetHttp=Nothing
IfErr.number0then
Err.Clear
GetHttpPage="C站点保护中!"
Exitfunction
EndIf
EndFunction
==============================
函数名:BytesToBstr
作用:转换编码函数
参数:字符串Body,编码Cset
==============================
FunctionBytesToBstr(Body,Cset)
DimObjstream
SetObjstream=Server.CreateObject("ado"&"d"&"b.st"&"re"&"am")
Objstream.Type=1
Objstream.Mode=3
Objstream.Open
Objstream.Writebody
Objstream.Position=0
Objstream.Type=2
Objstream.Charset=Cset
BytesToBstr=Objstream.ReadText
Objstream.Close
setObjstream=nothing
EndFunction
%>
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 |
|