2016-11-09 16 views
1

このコードは、使用状況に基づいてIPをブロックするためのものです。電子メールがトリガされ、挿入が実行され、cfif条件を満たすIPアドレスが使用されました。しかし、私は同じIPのSQLエディタでクエリを実行すると、0(つまりgetNin​​eHundredCnt.maxDownload)としてカウントを返しました。CFQUERYとCFIFの比較による予期しない結果

これは1人のユーザーにのみ発生しました。それは残りのユーザーにとってうまくいきます。ほぼ1Lのユーザーがアプリケーションに毎日アクセスしています。それが起こった理由を誰かが説明できるのは誰ですか?

<cfquery name="getExcessiveUsageConfig" DATASOURCE="#arguments.datasrc#"> 
    SELECT * FROM ExcessiveUsageConfig 
</cfquery> 

<cfset usageLimitStruct.maxFifMinDownload = getExcessiveUsageConfig.MAXFIFMINDOWNLOAD > 

<!---- This value is 900 and not changed ---> 
<cfquery name="getNineHundredCnt" DATASOURCE="#arguments.datasrc#"> 
    SELECT 
     (select count(9) 
      from downloads 
      where download_time > dateadd(minute,-15,getdate()) 
      and USER_IP = <cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR"> 
     ) as maxDownload, 
     (select TOP 1 DATEDIFF(second, DOWNLOAD_TIME, GETDATE()) 
      from CAPTCHA 
      WHERE USER_IP = <cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR"> 
      and Erights_sessionId = <cfqueryparam value="#arguments.erightsCookie#" cfsqltype="CF_SQL_VARCHAR"> 
      order by DOWNLOAD_TIME DESC 
     ) as Ccheck 
</cfquery> 


<cfif getNineHundredCnt.maxDownload gte usageLimitStruct.maxFifMinDownload> 

    <cfquery name="checkToBlockIpExcessUsage" DATASOURCE="#arguments.dataAuthentication#"> 
     INSERT INTO DisabledIPs(IP,TIMEDISABLED) 
     VALUES (<cfqueryparam value="#remoteAddress#" cfsqltype="CF_SQL_VARCHAR">,GETDATE()) 
    </cfquery> 

    <cfmail from="[email protected]" to="[email protected]" subject="IP Blocked" type="text"> 
    IP : #remoteAddress# 
    Time : #currentTime# 
    The IP has been blacklisted 
    </cfmail> 

</cfif> 
+0

クエリがタイムアウトした場合、sqlクエリからの値として0を返す可能性はありますか? –

+0

ExcessiveUsageConfigにはいくつの行がありますか? –

+0

はその唯一の行で、列MAXFIFMINDOWNLOADの値は900 –

答えて

3

getNin​​eHundredCnt.maxDownloadが0で、usageLimitStruct.maxFifMinDownloadも0である可能性があります。値を出力して確認します。