2012-05-30 108 views
0

我有一個腳本,每當有人通過FaceBook評論框發表評論時會觸發一封電子郵件。 Fb.event.subscribe觸發我的服務器上的mail.php的ajax調用,該服務器會將電子郵件發送到我的電子郵件地址以通知新的評論。我如何使這更安全,並直接阻止訪問mail.php?防止PHP表單發送直接訪問,允許使用AJAX

 FB.Event.subscribe('comment.create', function (response) { 
      var domain = "<?= $_SERVER['SERVER_NAME']; ?>"; 
      var url = "<?= $currentUrl ?>"; 
       alert("comment added"); 

          var xmlhttp; 
          if (window.XMLHttpRequest) 
           {// code for IE7+, Firefox, Chrome, Opera, Safari 
           xmlhttp=new XMLHttpRequest(); 
           } 
          else 
           {// code for IE6, IE5 
           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
           } 

          xmlhttp.open("GET","http://" + domain + "/mail.php?url=" + url,true); 
          xmlhttp.send(); 

     }); 


** ---------- here is mail.php -------- ** 



<?php 
    $to = "MY EMAIL HERE"; 
    $subject = "New Comment Added"; 
    $message = "New Comment posted here: " . $_GET['url'] ; 
    $from = "MY EMAIL HERE"; 
    $headers = "From:" . $from; 
    //mail($to,$subject,$message,$headers); 
    //echo $_GET['accesstoken'] ; 
?> 

回答

4

你不能這樣做。如果您啓用客戶端訪問客戶端代碼mail.php,則任何人都可以通過腳本訪問它。您可以儘可能多地混淆它,但如果有人真的想要知道如何訪問它,他們會。

編輯:基本規則是,如果它可以在瀏覽器由一個人來完成,那麼就可以在腳本由計算機來完成。這個規則的唯一半對應點是CAPTCHA,但即使這些也可以在今天被繞開。

+0

嗯..所以任何建議? –

+0

是的。您可以使用PHP訪問圖形API以獲得您的意見,https://graph.facebook.com/comments/?ids= 解析那裏的JSON並找出您尚未處理的任何新評論。由於一切都發生在服務器端,所以你不會有垃圾郵件問題。 –

0

你可以在你的PHP腳本添加報頭校驗是這樣的:

<?php 
    if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { 
    //send email 
    } 
?> 
+0

但是,然後我的腳本可以簡單地設置標題... –

+0

這可能不是一個完美的或「適當的」解決方案,但我認爲這會減少您的應用程序中的少量洪水。 – Ignas

+0

只是一個額外的措施。但最好的辦法是添加一些權限,以便不是每個人都可以訪問email.php – Ignas