2016-11-08 66 views
0

我在我的php頁面中有一個表單。在這個頁面中,我打開一個窗口彈出窗口。在這個彈出窗口中有一些字段。我們填寫表格並提交。提交表單後,我們會向用戶發送郵件。基本上這是一種用戶可以通過發送郵件給他的朋友提供網站參考的形式。 不幸的是有人攻擊我的網站,並使用我的PHP腳本發送郵件。 所以,我想限制從外部服務器訪問php腳本。 我應該怎麼做才能限制訪問。 我試過一些選項,但沒有得到成功。阻止發佈來自不同域的數據PHP

+1

如果沒有顯示您當前如何發送郵件的代碼,我們無法多說。另外,它是脆弱的代碼,還是你在服務器上用於郵件的任何東西?簡單地通過帖子標題,CSRF令牌將有所幫助。 –

+0

我不認爲如果你能做些什麼,因爲你的功能是基於發送電子郵件!也許你可以通過他們的IP來限制用戶(不是100%安全),但是可能會減慢使用腳本的人! – Soheyl

+1

您需要爲每個發佈請求添加csrf標記以防止跨域請求。按照此更多信息http://stackoverflow.com/a/31683058/4584028 –

回答

1

有兩種方法可以減輕這一點,完全停止這是不可能的。

使用HTTP引用:

$referer = parse_url($_SERVER['HTTP_REFERER']); 
$allowedDomain = 'yourdomain.com'; 

if ($referer['host'] == $allowedDomain){ 
    //Process your mail script here. 
} 

請注意,你不能相信HTTP_REFERER值。它很容易被欺騙。

使用令牌:

生成隨機令牌,並把它放在你的表單POST內,如:

if (!isset($_POST['submit'])){ 
    $_SESSION['random_code'] = rand(0, 1000000); 
}else{ 
    if ($_POST['random_code'] == $_SESSION['random_code']){ 
     //process your mail script here 

     //reissue session code 
     $_SESSION['random_code'] = rand(0, 1000000); 
    } 
} 
<input type='hidden' name="random_code" value="<?php echo $_SESSION['random_code'];?>"> 

保存此隨機碼在您的會話。當提交表單時,將提交的random_code值與會話中保存的代碼進行匹配。如果兩者都相同,則處理您的郵件腳本。

這樣,攻擊者必須先打開你的頁面,獲取隨機代碼,然後提交你的表單。它不會阻止這種攻擊,但它肯定會減慢他的進程。