Ostatnio dużo się pisze na temat sql injection zapominając o innych groźnych atakach. Całkiem niedawno ktoś przez mój serwer, a konkretnie przez jeden z skryptów php typu ‘kontakt’ wysłał masę spamu na AOL przez co AOLowcy się na mnie obrazili
Pierwsze co zrobiłem to odpowiedni wpis w mod_security. Na sieci znalazłem wiele wersji np:
SecFilterSelective ARGS_VALUES „\n[[:space:]]*(to|bcc|cc)[[:space:]]*:.*@”
co niestety nie dało rady (?!) spam poszedł jeszcze raz. (na gotroot.com znajdziecie więcej regułek do mod_security).
Spam poszedł przez specjalnie spreparowany mail w MIME. W takim wypadku najlepiej filtrować inputa w poszukiwaniu róznych znaków np.
< ?php
$from=$_POST["sender"];
if (eregi(„\r”,$from) || eregi(„\n”,$from)){
die(„Why ??„);
}
?>
(/n = %0A /r=%0D)
Dopiero to wychwyciło wstrzyknięty spam kodowany w MIME. Więcej o tym (wraz z przykładami) można przeczytać na SecurePHP.
Póki nie miałem własnego serwera nie sądziłem, że można być narażonym na kilkaset różnych ataków dziennie
Logi mod_security normalnie puchną. Najwięcej jest ataków na phpBB, awstats i wordpressa. Boty szukające takich skryptów najlepiej od razu banować bo potrafią one setki razy dziennie zapuszczać tysiące requestów











Witam,
ja przy formularzy kontaktowym stosuje weryfikacje adresu email (funkcje wklejam ponizej), ktora wg mnie takze zapobiega stosowaniu email injections … no chyba ze sie myle?
// weryfikacja poprawnosci adresu email
function verifyEmail($email) {
$wholeexp = ‘/^(.+?)@(([a-z0-9\.-]+?)\.[a-z]{2,5})$/i’;
$userexp = „/^[a-z0-9\~\!\#\$\%\&\(\)\-\_\+\=\[\]\;\:\’\”\,\.\/]+$/i”;
if (preg_match($wholeexp, $email, $regs)) {
$username = $regs[1];
$host = $regs[2];
if (checkdnsrr($host, MX)) {
if (preg_match($userexp, $username)) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
Nie jestem specjalistą ale chyba się mylisz bo ja też miałem sprawdzanie poprawności emaila (chociaż może diabeł tkwi w szczegółach tj. tutaj w wyrażeniach regularnych), a spam przeszedł. Niestety nie orientuje się w mailach i kodowaniu mime ale na stronie do której dałem linka w tekście jest to dokładnie opisane wraz z przykładami.
mnie sie zdaje, ze tutaj kluczowa funkcja to checkdnsrr($host, MX), no bo przy typowym email injection (dopisanie dodatkowych linii do email headera w polu formularza) nigdy nie powinna zwrocic true … no chyba, jak juz napisalem, sie myle
nie testowalem.
Kiedyś pisałem o tym samym problemie u siebie:
http://calek.info/index.php?showNews=228
Na szczęście nie wykorzystano mnie tak, jak Ciebie ;>)
Pingback: » 100 dni adminowania mount /dev/normanos