2012-04-03 48 views
1

以下PHP腳本中是否存在注入安全風險?

<?php 
$empfaenger_1 = "[email protected]"; 
$sender = "[email protected]"; 

$name = $_POST['name']; 
$telefon = $_POST['phone']; 
$betreff = "Test"; 

$text = 
"Please contact me 

Name: $name 
Telefon: $telefon"; 

mail($empfaenger_1, $betreff, $text,"from:$sender"); 

$url = htmlspecialchars($_SERVER['HTTP_REFERER']); 
echo "<center><br><br>Thank you<br><br>"; 
echo "<center><a href='$url'>Back</a>"; 

回答

2

注射液mail

這裏的風險似乎很小。這裏有幾個答案指出了將HTML注入電子郵件的可能性。對於HTML電子郵件,這是可能的,但HTML郵件將Content-type標頭設置爲text/html或作爲多部分郵件的一部分。 RFC 1521規定必須明確設置HTML內容類型,並且如果沒有指定明文爲默認值的內容類型:

默認RFC 822消息按照該協議以純文本形式在US- ASCII字符集,可以明確指定爲「Content-type:text/plain; charset = us-ascii」。如果沒有指定Content-Type,則假定爲默認值。

在上面的代碼中,用戶提供的文本插在標題後面;攻擊者將沒有機會改變內容類型(HTML或多部分,後者允許注入MIME邊界)。

最終結果不能是純文本消息。如果用戶在郵件中注入HTML標籤,閱讀郵件的人會在郵件中看到這些HTML標籤。電子郵件客戶端通常不會機會性地檢查明文消息來定位和解析嵌入的HTML和JavaScript。

注射別處

雖然使用mail可能是安全的,有在剩餘的代碼中潛在的注入漏洞:

$url = htmlspecialchars($_SERVER['HTTP_REFERER']); 
echo "<center><a href='$url'>Back</a>"; 

默認情況下,htmlspecialchars使用ENT_COMPAT | ENT_HTML401標誌,它不不要將單引號轉換爲&#039 ;.鏈接href屬性用單引號分隔。因此,如果攻擊者可以強制HTTP引用者包含單引號,則他/她可以調用常規XSS攻擊。 (舉例來說,如果推薦人是被迫的http://whatever/a' onclick='alert()相當於點擊鏈接可以在雙引號中的第二行調用任意JavaScript。要解決這個問題,無論是地方「$url」,或撥打htmlspecialcharsENT_QUOTES標誌。

1

如果打開在HTML視圖模式下的電子郵件,用戶注入腳本,然後是的,這容易XSS,並推而廣之,CSRF客戶端。您當然應該使用sanitize all untrusted input

更具體的XSS保護信息可以在OWASP web site找到。

+0

好吧,所以我應該用htmlspecialchars消毒我想? – Alex 2012-04-03 13:08:41

+1

我會使用'strip_tags'而不是htmlspecialchars文本查看器有更多的樂趣。此外htmlspecialchars可能會打破你的sonderzeichen。 – PiTheNumber 2012-04-03 13:10:50

1

有可能是,一個可以注入的JavaScript代碼,例如,如果有人把這個作爲自己的名字:

<script type="text/javascript"> 

window.location = "http://www.google.com/" 

</script> 

任何人查看該名稱將被重定向到google.com;你可以通過說:

$name = htmlentities(strip_tags($_POST['name'])); 
4

我認爲郵件注入只能在頭字段中。郵件注入正文文本不知道給我。

反正看出來的XSS,你應該使用用strip_tags():

$name = strip_tags($_POST['name']); 
$telefon = strip_tags($_POST['phone']); 
相關問題