Stavo approfondendo l'argomento e allo scopo ho fatto alcune ricerche sul web trovando molte funzioni.
Io filtro tutti gli input anzitutto con strip_tags() ed elimino il primo problema. Ma da come ho capito c'è molto altro...
Vi dico ciò che ho capito.
L'utente può inserire nella mail degli headers (si parla soprattutto di 'headers injection') e quindi il problema consisterebbe:
1) i caratteri di ritorno a capo e ritorno carrello ('\r' e '\n');
2) alcune stringhe: 'content-type', 'to', 'cc', 'bcc';
Data la mia ignoranza sull'argomento e sulle espressioni regolari volevo chiedervi quali metodi adottare per filtrare gli input inviati dall'utente e vi volevo sottoporre alcune funzione filtro scopiazzate sulla rete ma che vorrei capire.
Sul web ho trovato:
Codice PHP:
<?php
function has_no_newlines($text)
{
return preg_match("/(%0A|%0D|\\n+|\\r+)/i", $text) == 0;
}
function has_no_emailheaders($text)
{
return preg_match("/(%0A|%0D|\\n+|\\r+)(content-type:|to:|cc:|bcc:)/i", $text) == 0;
}
?>
Cosa fanno questi due filtri (cosa sostituiscno??!)??
cosa sono %0A %0D e quel + dopo a \r \n cosa significa?
la 'i' alla fine significa che sostituisce sia in caso di maiuscole e minuscole?
-----------------------------------
Codice PHP:
<?php
function isInjected($str) {
$injections = array('(\n+)',
'(\r+)',
'(\t+)',
'(%0A+)',
'(%0D+)',
'(%08+)',
'(%09+)'
);
$inject = join('|', $injections);
$inject = "/$inject/i";
if(preg_match($inject,$str)) {
return true;
}
else {
return false;
}
}
?>
questa come è rispetto alla precedente?
--------------------------------------
Codice PHP:
<?php
function safe( $name ) {
return( str_ireplace(array( "\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:" ), "", $name ) );
}
?>
Come devo modificare le stringhe dell'array per sostituire str_ireplace (php version 5.0.0 o superiore) con preg_replace (con modificatore 'i')?
Voi cosa utilizzate per filtrare gli input dei form mail? Ci sono altre cose da sapere per rendere sicuro al 100% il form contatti?