预览模式: 普通 | 列表

Asp防刷新代码

内容来源于网络,代码为测试,谨慎使用。

1.在要保护的页面顶部加如对AntiRefresh.asp文件的引用如:
<!--#include virtual="AntiRefresh.asp" -->
2.接着添加调用代码
<%
   Const VarNameDateArr="www_domai_net_App_DataArr" '队列名称
   Const VarNameIPArr="www_domai_net_App_IPArr"     '队列名称
   Dim objAntiRefresh
   Set objAntiRefresh= new AntiRefresh
   objAntiRefresh.BufferSize=100   '队列大小
   objAntiRefresh.CacheItemAvailTime=2 '间隔时间
   If Not objAntiRefresh.IsValidAccess() Then
     Set objAntiRefresh=Nothing
    Response.Write("您的访问过去频繁请2秒后再试.")
    Response.End()
   End If
   Set objAntiRefresh=Nothing

%>

其中要注意的是 
   Const VarNameDateArr="www_domai_net_App_DataArr" '队列名称
   Const VarNameIPArr="www_domai_net_App_IPArr"     '队列名称
比方你要在List.asp与search.asp中加入通一个防刷新器,那么你把上面的调用代码分别复制到这两个页面,或者保证两个页面的掉用代码一致。这样的效果是,你访问了List.asp页那么你在2秒内将不能访问List.asp或Search.asp页
如果你要2个页面独立,即你访问List.asp后,你会在2秒内不能再次访问List.asp,但是你可以访问Search.asp,反之毅然,那么你就要保证2个页面的 Const VarNameDateArr="xxx",Const VarNameIPArr="xxx"不同,比方第一个也面你用xxxList,第个个页面用xxxSearch,
如:
   Const VarNameDateArr="www_domai_net_App_DataArr_Search" '(_List)
   Const VarNameIPArr="www_domai_net_App_IPArr_Search"     '(_List)

唠叨这些是给那么不太懂的朋友,以便他们能使用这些代码,如果你懂Asp那么以上的对你来说就很好理解了。


下面是AntiRefresh.asp文件源码




<%
'***************************************
'*         页面防刷新模块              *
'* WDFrog,2007-8-16                  

'***************************************

Class AntiRefresh

Private IPArr,DateArr
Private m_BufferSize
Private m_CacheItemAvailTime

Private Sub Class_Initialize()
   Application.Lock()
   m_BufferSize=100
   m_CacheItemAvailTime=2
  
End Sub
Private Sub Class_Terminate()
   Application.UnLock()
End Sub
Public Property Get CacheItemAvailTime
   CacheItemAvailTime=m_CacheItemAvailTime
End Property
Public Property Let CacheItemAvailTime(Value)
   m_CacheItemAvailTime=Value
End Property

Public Property Get BufferSize
   BufferSize=m_BufferSize
End Property

Public Property Let BufferSize(Value)
   m_BufferSize=Value
End Property

Private Sub EnsureArr()
   If IsArray(Application(VarNameDateArr)) Then
    DateArr=Application(VarNameDateArr)
   Else
    ReDim DateArr(BufferSize)
   End If
  
   If IsArray(Application(VarNameIPArr)) Then
    IPArr=Application(VarNameIPArr)
   Else
    ReDim IPArr(BufferSize)
   End If
End Sub

Public Function IsValidAccess()
   Dim ip,i
   ip=GetIP()
   IsValidAccess=True
   EnsureArr()
   For i=1 To BufferSize
    If IPArr(i)=ip Then
     If DateDiff("s",CDate(DateArr(i)),Now()) < CacheItemAvailTime Then
       IsValidAccess=False
       Exit Function
     End If   
    End If
   Next
   Call QueueHandle()
   DateArr(1)=Now()
   IPArr(1)=ip
   Application(VarNameIPArr)=IPArr
   Application(VarNameDateArr)=DateArr
End Function

Public Function ClearCache()
   Set Application(VarNameDateArr)=Nothing
   Set Application(VarNameIPArr)=Nothing
End Function

Private Sub QueueHandle()
   Dim i,j
  
   For i=BufferSize-1 To 1 Step -1
    DateArr(i+1)=DateArr(i)
   Next
   For j=BufferSize-1 To 1 Step -1
    IPArr(j+1)=IPArr(j)
   Next
End Sub

Private Function GetIP()
   Dim strIPAddr
   If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" or InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
    strIPAddr = Request.ServerVariables("REMOTE_ADDR")
   ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
    strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",")-1)
   ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
    strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";")-1)
   Else
    strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
   End If
   GetIP = (Trim(Mid(strIPAddr, 1, 30)))
End Function

End Class 
%>

Tags: asp

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2418

Php伪造搜索引擎蜘蛛进行采集

$ctx = stream_context_create(array(
'http' => array(
'timeout' => 5,
'header'=>"User-Agent: Baiduspider+(+http://www.baidu.com/search/spider.htm)\r\n" .
// "Cookie: foo=bar\r\n"
// 'HTTP_REFERER' =>'http://ww.com/index.php',
// 'User-Agent' =>'jongin'
)
)
);
$rs = file_get_contents('http://test.com/test.php', 0, $ctx);


经过分析日志和对比表明和蜘蛛除了ip不同外,是一模一样的...
先了解一下PHP file_get_contents() 函数
定义和用法
file_get_contents() 函数把整个文件读入一个字符串中。
和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
语法
file_get_contents(path,include_path,context,start,max_length)参数 描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context 可选。规定文件句柄的环境。
context 是一套可以修改流的行为的选项。若使用 null,则忽略。
start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。
说明
对 context 的支持是 PHP 5.0.0 添加的。
针对超时或页面过慢,一般可采取两个解决方案:
1. 利用file_get_contents()第三个参数
PHP代码

<?php
$url = "http://www.1bo8.cn/zhoz.php";
$ctx = stream_context_create(array(
'http' => array('timeout' => 10)
)
);
$result = @<b style="color:black;background-color:#ffff66">file_get_contents</b>($url, 0, $ctx);
if($result){
var_dump($result);
}else{
echo " Buffer is empty";
}
?>
此方法1,我经测试在本地反映良好,但如果在外网测试(环境:中国→美国服务器间)基本都是超时的情况。
测试了TimeOut基本没有用了,建议以下方式。
2. 使用curl扩展库
PHP代码

<?php
$url = "http://www.1bo8.cn/zhoz.php";

try {
echo date('Y-m-d h:i:s');
echo "";
//$buffer = <b style="color:black;background-color:#ffff66">file_get_contents</b>($url);
$buffer = zhoz_get_contents($url);
echo date('Y-m-d h:i:s');
if(emptyempty($buffer)) {
echo " Buffer is empty";
} else {
echo " Buffer is not empty";
}
} catch(Exception $e) {
echo "error ";
}

function zhoz_get_contents($url, $second = 5) {
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch,CURLOPT_TIMEOUT,$second);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);

$content = curl_exec($ch);
curl_close($ch);
return $content;
}
?>
综述,根据系统环境来选择到底应用哪种方法:
PHP代码

<?php
function vita_get_url_content($url) {
if(function_exists('<b style="color:black;background-color:#ffff66">file_get_contents</b>')) {
$file_contents = <b style="color:black;background-color:#ffff66">file_get_contents</b>($url);
} else {
$ch = curl_init();
$timeout = 5;
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents = curl_exec($ch);
curl_close($ch);
}
return $file_contents;
}
?>  

Tags: php file_get_contents

分类:技术文章 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 2626

[私密日志] 私密日志

该日志是私密日志,只有博主或发布者可以查看!
分类:随笔杂记 | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1633

 广告位

↑返回顶部↑