0

我有一个脚本,每次有人通过 Facebook 评论框发表评论时都会触发一封电子邮件。Fb.event.subscribe 在我的服务器上触发对 mail.php 的 ajax 调用,它会向我的电子邮件地址发送一封电子邮件以通知新评论。我如何使这更安全并直接阻止对 mail.php 的访问?

        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

2 回答 2

4

你不可以做这个。如果您允许客户端mail.php使用客户端代码进行访问,那么任何人都可以使用脚本访问它。你可以尽可能多地混淆它,但如果有人真的想知道如何访问它,他们会的。

编辑:基本规则是,如果它可以由人类在浏览器中完成,那么它可以由计算机在脚本中完成。该规则唯一的半对立点是验证码,但即使这些现在也可以被规避。

于 2012-05-30T11:38:05.873 回答
0

您可以像这样在 php 脚本中添加标头检查:

<?php
  if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    //send email
  }
?>
于 2012-05-30T11:47:05.487 回答