PHP клас за засичане и обработка на потенциални мейл хедъри в стринг
Това е един малък PHP клас за засичане и обработка на мейл хедъри в даден стринг. Полезен е за проверка на текста на форми за контакт, книги за гости и подобни преди да се изпрати по пощата. Така се ограничават атаките от тип mail headres injection. Класът има три основни функции:- Засичане на вероятни хедъри
- Изтриване на вероятните хедъри
- Преобразуване на подозрителния текст, така че да не представлява проблем за пощенските сървъри.
<?php
/**
* Class for detecting possible mail headers in string. Can be used for verifying web form input before sending via
* email.
*/
class MailHeadersHandler {
/**
* All posible headers according to RFC.
* @var array
*/
protected $mail_rfc_headers= array('Date', 'From', 'Sender', 'Reply\-To', 'To', 'Cc', 'Bcc', 'Message\-ID',
'In\-Reply\-To', 'References', 'Subject', 'Comments', 'Keywords', 'Resent\-Date', 'Resent\-From',
'Resent\-Sender', 'Resent\-To', 'Resent\-Cc', 'Resent\-Bcc', 'Resent\-Message\-ID', 'Return\-Path',
'Received');
/**
* Detect all possible header patterns.
* @param string string text that is searched.
* @return array() false if no headers found, array of possible headers otherwise.
*/
function detect($string) {
$matches= array();
foreach($this->mail_rfc_headers as $header) {
$regex= '/'.$header.'\s*\:/i';
if(preg_match($regex, $string, $arr)) {
$matches[]= $arr[0];
}
}
if(count($matches) == 0)
return false;
return $matches;
}
/**
* Deletes all posible header patterns.
* @param string string text that is searched.
* @return string text with removed header patterns.
*/
function erase($string) {
foreach($this->mail_rfc_headers as $header) {
$regex= '/'.$header.'\s*\:/i';
$string= preg_replace($regex, '', $string);
}
return $string;
}
/**
* Escapes header pattern to header_value format.
* @param string string text that is searched.
* @return string text with escaped header patterns.
*/
function escape($string) {
foreach($this->mail_rfc_headers as $header) {
$regex= '/('.$header.')\s*\:/i';
$string= preg_replace($regex, '\1_', $string);
}
return $string;
}
}
?>
Няма коментари
Обратно към списъка със статиите
Тази страница последно е променяна на 2025-04-30 04:29:41