蒙在股里 发表于 2015-1-16 22:05:00

ASP网页设计静态程序防收罗的新办法

缺点:安全性不是太差了,还行,只要你充分利用系统自带的工具;唯一缺点就是执行效率慢,如何进行网站优化以后,效果会比较好。今天在网上看到一个防收罗软件,说收罗只会见以后网页,不会会见网页的图片、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*FromWhereIp1_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*FromWhereIp2_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"
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提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。

若相依 发表于 2015-1-27 19:43:13

用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

海妖 发表于 2015-2-5 15:00:20

代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。

精灵巫婆 发表于 2015-2-12 10:27:21

Server:这个表示的服务器,操作服务器的一些东西使用这个,如Server.Mappath转换服务器路径,Server.CreateObject实例化一个组件

山那边是海 发表于 2015-3-3 03:08:20

你可以通过继承已有的对象最大限度保护你以前的投资。并且C#和C++、Java一样提供了完善的调试/纠错体系。

乐观 发表于 2015-3-11 09:32:17

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

因胸联盟 发表于 2015-3-18 07:32:24

不能只是将它停留在纸上谈兵的程度上。

小魔女 发表于 2015-3-25 16:08:42

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:
页: [1]
查看完整版本: ASP网页设计静态程序防收罗的新办法