簡體   English   中英

間歇性HTTP 403禁止錯誤調用相同的Ajax代碼

[英]Intermittent HTTP 403 Forbidden error calling same Ajax code

我用我的JavaScript客戶端(比如, foo.js )打電話給我的PHP Ajax代碼在服務器(比如, bar.php )。 這在大多數情況下都能正常運行,但是偶爾我會返回HTTP 403(禁止訪問),而不是通常的200(確定)。 使用完全相同的代碼,相同的參數等會發生這種情況。

為什么會這樣呢? 我該如何解決? 是否有可能由於我的bar.php代碼內的某些操作而發生了這種情況? 如何記錄原因?

foo.js客戶端:

function postAjax(url, queryString, callback) {
  var x = new XMLHttpRequest();
  x.onreadystatechange = function() {
    if (x.readyState === 4) {  // 4=after HTTP response content finished loading
      if (x.status === 200) callback(true, x.responseText);
      else callback(false, x.status);
    }
  };
  x.open('POST', url, true);
  x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
  x.setRequestHeader('Content-type','application/x-www-form-urlencoded');
  x.send(queryString);
}

var params = 'aaa=xxx&bbb=yyy';
postAjax('bar.php', params, myCallback);

function myCallback(ajaxStatus, ajaxResponse) { /* do something */ }

bar.php服務器:

<?php
header('Content-Type: text/plain');
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
if ($isAjax) {
  /* Do something with $_POST['aaa'] and $_POST['bbb'] */
  echo 'Success';
}
else {
  echo 'Error';
}
?>

附加新信​​息:

瀏覽器控制台(在此示例中為Firefox):

當一切都好時(大部分時間):
+ POST http://example.com/bar.php 200 OK ZZZms

如果出現錯誤(例如,在我第七次嘗試之后):
+ POST http://example.com/bar.php 403禁止X ZZZms
然后在ajaxResponse中返回403,它來自x.status

在Firefox控制台中展開“ +”,我看到響應:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /bar.php
on this server.</p>
<p>Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

查看Apache Raw Accwss日志(通過cPanel),我看到了所有類似的POST行,在第7個測試中,其狀態從200更改為404:

<my IP> - - [17/Jan/2015:09:55:50 -0500] "POST /bar.php HTTP/1.1" 404 - "<my test url>" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0"

“您無權訪問” ???
為什么我有6次但沒有7次獲得許可?

同時查看Apache錯誤日志(通過cPanel),我看到以下行:

[Sat Jan 17 09:55:50 2015] [error] [client <my IP>] File does not exist: /home/<my user>/public_html/403.shtml, referer: <my test url>

做了一些徹底的研究。 是... mod_security

查看http://www.opensourceforu.com/2011/08/securing-apache-part-10-mod_security/ ,搜索“ SecFilterScanPOST”。 我的'aaa'發布變量用作一些隨機令牌,並且偶爾會有此mod_security機制過濾的值。

在與主機支持人員聊天之后,此問題已修復。 最初,我認為自己可以通過適當地編輯一些.htaccess文件來解決此問題,但最終看來,我需要他們的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM