2013-03-15 39 views
2

如果沒有對php.ini的訪問(假設php -v> = 5.3 & mail.add_x_header = 1)或者修補郵件的方式,有沒有辦法改變使用PHP的mail()功能時,X-PHP-原產腳本頭?混淆X-Php-Originating-Script

我所做的一些小研究表明,在致電mail()之前更改$_SERVER['PHP_SELF']可以做到這一點,但是這對我並不適用。

我還試圖設置X-PHP-始髮腳本直接,這導致了附加的 'X-PHP-始髮腳本' 標頭。

在這種情況下,我們的目標是,以防止所述電子郵件閃耀的腳本命名細節的收件人。

謝謝!

回答

4

好吧,如果我們爲mail() function檢查出的源代碼,我們可以看到它的硬編碼有:

if (headers != NULL) { 
    spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n%s", php_getuid(), f, headers); 
} else { 
    spprintf(&hdr, 0, "X-PHP-Originating-Script: %ld:%s\n", php_getuid(), f); 
} 

所以,這是硬編碼放在UID。但讓我們看看我們在哪裏。

現在,您應該明白,SAPI基本上是不同服務器API與PHP通信的多態方式。因此,如果我們看幾個SAPIs:

  • mod_php with Apache

    這只是返回阿帕奇傳遞給它的finfo結構。沒有機會修改它(它不是一個環境變量)。它直接來自apache。所以沒有運氣。

  • FPM

    這還不落實sapi_get_stat()。所以默認的行爲仍然運行(這是當前路徑的基本統計)。

所以,簡單的答案是否定的,這是不可能的,而不打補丁PHP的核心......

+0

很好的指向源,但不好意思的是,引用的代碼塊在'if(PG(mail_x_header))'條件下,這使@NightOwl的回答更合理。 – 2014-08-13 08:00:19

4

我還沒有找到改變「X-PHP原產腳本」的方式任何參考頭,但根據PHP手冊(PHP Manual >> Function Reference >> Mail Related Extensions >> Mail >> Installing/Configuring),其頭部可使用.htacess文件,該文件將阻止任何人從你的郵件頭信息拾遺沒有你訪問您的php.ini文件被關閉。

設置將其關閉是:

mail.add_x_header bool 

Add X-PHP-Originating-Script that will include UID of the script followed 
by the filename. 

這將使禁用它實際需要的線:

mail.add_x_header 0 

此設置標記與PHP_INI_PERDIR模式(可用自PHP 5.3 .0)。 PHP_INI_PERDIR表示「條目可以在php.ini,.htaccess,httpd.conf或.user.ini(自PHP 5.3起)中設置」。

我沒有親自測試過,所以YMMV。

+0

這在PHP 5.3.10-1ubuntu3.11中不起作用。太糟糕了。我在.htaccess中嘗試了'mail.add_x_header 0'和'mail.add_x_header Off'。語法不同? – 2014-08-13 07:56:55

+0

@SwissMister語法應該是「php_flag mail.add_x_header關閉」,理想情況下包裝在 ...標記中。 – Teddy 2015-03-06 09:54:56