Autor | Zpráva | ||
---|---|---|---|
bar Profil |
#1 · Zasláno: 6. 12. 2006, 09:12:14 · Upravil/a: bar
Dobré ráno,
mám problémy se spamem, který je rozesílán z mého skriptu pomocí fce mail. Dá se to vůbec nějakým způsobem 100% zabezpečit, aby k tomuto nedocházelo, případně co bych mohla ošetřit?? Skript <?php function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } if (!empty($_POST)) // kontolovat na mail { if (!JeEmail($_POST["email"])) // kontrolou neprošla { if ($jazyk=="pl") // testování jazyk. verze Header("Location: http://www.xx-as.cz/kontakty.php?a=podaliście błędny e-mail"); else {if ($jazyk=="en") Header("Location: http://www.xx-as.cz/contact.php?a=please try again, incorrect e-mail"); else Header("Location: http://www.perex-as.cz/kontakt.php?a=zadali jste chybný e-mail"); }} else { // kontolou OK $email=$_POST["email"]; //mail odesilatele - z formuláře $zprava=$_POST["zprava"]; $jmeno=$_POST["jmeno"]; $zprava = iconv("CP1250","ISO-8859-2",$zprava); $jmeno = iconv("CP1250","ISO-8859-2",$jmeno); $jazyk=$_POST['jazyk']; $headers.= "Content-Type: text/html; charset=ISO-8859-2\r\n"; if(Mail("xx@xx-as.cz","dotaz z www-xx","jméno odesilatele:$jmeno\n\n$zprava","From:".$email."\r\n".$header)); { if ($jazyk=="pl") Header("Location: http://www.perex-as.cz/kontakty.php?b=Dziękujemy za Państwa zainteresowanie, z przyjemnością odpowiemy na otrzymane e-maile."); else {if ($jazyk=="en") Header("Location: http://www.xx-as.cz/contact.php?a=thank you for your e-mail"); else Header("Location: http://www.xx-as.cz/kontakt.php?b=Děkujeme za Vaši zprávu, pokud jste uvedl svůj e-mail, brzy odpovíme."); }} } } ?> Jediné, co mě napadá je použití wordwrap u proměnné $email, kterou tahám z formuláře (mail odesilatele) a její oříznutí. Za každou radu moc děkuji!!! |
||
bar Profil |
#2 · Zasláno: 6. 12. 2006, 18:26:22 · Upravil/a: bar
Trochu jsem to pořešila a byla bych ráda, pokud má k tomu někdo zkušenější připomínky, aby je napsal. V podstatě jsem ořízla proměnnou email získanou z formuláře pouze na jednu e-mail adresu, kterou pak předávám do fce mail jako odesilatele (from)
vypisuju pouze část skriptu: $email=$_POST["email"]; if(strpos($email,',')!= false) { $konec=strpos($email,','); $email= substr($email,0,$konec); } $zprava=$_POST["zprava"]; $jmeno=$_POST["jmeno"]; |
||
ernesto Profil * |
#3 · Zasláno: 7. 12. 2006, 09:33:25
sory, ale nepochopil sem přesně tvuj problém, nicméně mam pro tebe jinou radu a to ohledně několika jazykových verzí, my používáme tohle: mam x skriptů pro x jazykovejch verzí a v každým si definuju konstanty - nějak takhle:
skript ./cz/res.php <?php define('BAD_EMAIL','zadali jste chybný e-mail'); ?> skript ./pl/res.php <?php define('BAD_EMAIL','podaliście błędny e-mail'); ?> skript ./en/res.php <?php define('BAD_EMAIL','please try again, incorrect e-mail'); ?> potom podle toho jakou jazykovou verzi uživatel použije se naincluduje příslušnej soubor a zbavíš se tim těch odpornejch ifů (jestli máš ten web udělanej takhle ůplně všude, tak to musí bejt děsnej bastl), jedeš prostě jenom tohle: if (!JeEmail($_POST["email"])) // kontrolou neprošla Header("Location: http://www.xx-as.cz/kontakty.php?a=".BAD_EMAIL); else {[kód pro odeslání mailu]} pochybuju, že by se ti to chtělo teď přepisovat, ale snad pro příště pokud líp popíšeš původní problém, tak bych moh bejt nápomocnej i tam - nějak mi uchází kdo koho potom spamuje, když je tam příjemce napsanej natvrdo |
||
bar Profil |
#4 · Zasláno: 7. 12. 2006, 13:14:11
ernesto
díky, použiju, jsem spíš amatér a tohle dělám jako hobby, takže jsem ráda, že se můžu něčemu přiučit :). Spam se mně dostal do skriptu, který zpracovává data z kontaktního formuláře. Ve formuláři mám jeden input, do kterého se zadává email odesilatele. Přes tento input se nějaký hnusný robot dostal do skriptu pro zpracování formuláře, který pak odesílám pomocí fci mail. Výsledkem bylo odeslání šíleného množství mailů, což na hostingu nevidí samozřejmě rádi. Data získané z formuláře vypadala přibližně takto: To: marketing@xx-as.cz Subject: dotaz z www From:affect Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Subject: Re: Hi bcc: bschmidt@westside.com,carolyn3@ptd.net,drouse@blackplanet.com, ian@liontrax.com,spurvis@whbcjackson.org,christieo@mail.com, ericangel22@wmconnect.com,jovo@verizon.net, babypinkangel_2000@pigletmail.com,patricklenzi@sbcglobal.net, atd Chtěla jsem to vyřešit tak, že si otestuju počat e-mail adres, který dostávám z formuláře a pak pustím jen první a ostatní oříznu. Toto řešení ale patrně není úplně nejlepší. Lepší by bylo využít fci, kterou testuju získanou e-mail adresu: function JeEmail ($cislo) { return ereg("^.+@.+\..+$",$cislo); } Chtěla bych trochu upravit regularní výraz, ve kterém budou povolené znaky, přibližně tak: function JeEmail ($cislo) { return ereg ("[a-zA-Z0-9_\.\-]{1,64}@[a-zA-Z0-9\.\-]+'",$cislo); } Za jakoukoliv radu díky!!! |
||
ernesto Profil * |
#5 · Zasláno: 7. 12. 2006, 13:52:41
no mě se to moc nezdá, nějak mi nedocvakává, jak by se z toho políčka dostaly všechny ty maily do bcc a taky jak by to mohlo znásilnit subject. určitě se to odesílalo z mailserveru toho hostera? fakt mi to příde divný, nejlepší by bylo si tyhle $_POSTy někam od teď logovat aby bylo vidět co to tam vlastně přišlo, kdyby se tohle o čem referuješ stalo znova.
z dostupnejch informací usuzuju, že to tenhle skript nezpůsobil. datům co sou v mailu se nedá nikdy věřit, pro demonstraci ti můžu klidně poslat maila kterej se bude tvářit, že ho poslal třeba stallman. |
||
bar Profil |
#6 · Zasláno: 7. 12. 2006, 16:03:47 · Upravil/a: bar
ernesto
Já z toho už vůbec nejsem chytrá, dívala jsem se jen na článek od J.Vrány. který popisuje možné problémy s fcí mail, asi se stalo něco podobného. Původně jsem si myslela, že pokud mám ve fci mail přímo natvrdo napsaného příjemce mailu (není vkládán uživatelem do formuláře přes input a následně pomocí POST vytahován do proměnné a zpracováván), tak by se toto, co se stalo, nemělo stát, no stalo se. Teď to budu muset ošetřit a asi to udělám právě přes fci JeEmail, pomocí které budu testovat povolené znaky. Mimochodem stránky mám na Českém hostingu. |
||
ernesto Profil * |
#7 · Zasláno: 7. 12. 2006, 16:36:29
hmmm, tak to sem netušil, maily sou fakt zrádný, je to přesně tak jak si nastínila, takže určitě použij ten regulár, ta druhá verze vypadá líp, ta první připouští i mezeru a vzhledem ke žravosti regulárních výrazů by prošel prakticky jakejkoliv vstup. pokud chceš bejt úplně precizní, tak zkus vygooglit nějakej regulár na mail podle RFC nebo jak se ten úřad menuje. taky rozhodně doporučuju nějakou třídu na posílání mailů, některá by ty reguláry mohla mít i v sobě a popřípadě by mohla sama hodit chybu při vložení špatnejch dat - to už bude v manuálu. nějaký odkazy sou i pod tim článkem.
good luck |
||
ernesto Profil * |
#8 · Zasláno: 7. 12. 2006, 16:38:01
jo a sory že sem nepřihodil jak by měl ten regulár vypadat, ale podle mě je lepší použít hotový precizní řešení než bastlit něco sám - šetří to čas a nervy. a google umí používat i moje matka :) (ne ... kecam, používá seznam:)
|
||
Časová prodleva: 13 dní
|
|||
bar Profil |
#9 · Zasláno: 20. 12. 2006, 13:17:08
Vracím se k původnímu tématu, protože mám s formulářem a fcí mail další problém. Ten první jsem vyřešila a fci je mail upravila následujícím reg. výrazem:
function JeEmail ($cislo) { return ereg('^[a-zA-Z0-9_-.]+@[a-zA-Z0-9.-]+.[a-zA-Z0-9_-.]+$',$cislo) ; } Pak jsem ale zjistila, že někdo zneužívá přímo skript, kterým zpracovávám údaje z formuláře a odesílám pomocí fce mail. Probíhá to tak, že odněkud z cizích stránek míří odkaz přímo na skript, který zpracovává a odesílám data. Jakým způsobem jde zajistit, aby tento skript (viz výše) nebyl volán z cizích stránek? Zatím mě napadá jen to, že bych testovala, odkud volání skriptu přijde a pokud nejde ze stránky, na které mám formulář, jednoduše ukončit odesílání mailu. Má případně někdo podobné zkušenosti? |
||
krteczek Profil |
#10 · Zasláno: 20. 12. 2006, 14:17:44
vypadá to že ke svému emailu připíšou
bcc:maily@nejaky.cz,dalsi@mail.cz ...
tím ho rozešlou kamkoliv...:-) takže email "od" nedávej do from ale jen do obsahu zprávy přidej větu že ten a ten s tímto mailem mi posílá tuto zprávu, stejně většina emailových klientů emaily zvýraznuje (aktivuje) krteczek |
||
bar Profil |
#11 · Zasláno: 20. 12. 2006, 14:44:35
krteczek
asi to tak je, to jsem ale právě řešila tím regulárem a celkem to filtruje (když se tam objeví např. čárka, už to nepošle), samozřejmě se to dá určitě obejít. Teď mně jde ale o toto. Někdo cizí se podívá na stránku s formulářem a mrkne na action, kde mám adresu se skriptem, kterým zpracovávám formulář. A kdokoliv si pak udělá vlastní formulář a okudkoliv začne spamovat příjemce blbostma, bude prostě odkazovat z cizích stránek přímo na ten skript. Dá se tomu nějak zabránit? |
||
krteczek Profil |
#12 · Zasláno: 20. 12. 2006, 18:26:51 · Upravil/a: krteczek
no já to řeším tak že formulář i zpracovávaný script je na te samé stránce.
další pomucka může být vygenerování náhodného řetězce, který se předá jak ve skrytém formulářovém poli tak přes session a při post požadavku se ověří všechny hodnoty, pokud není chyba tak se ověří i tyto dvě proměnné($_SESSION['kontrola'] a $_POST['kontrola'] nějak takhle:
snad jsem tam nenasekal chyby, psal jsem to jen tak z hlavy a nekontroloval jsem to... krteczek |
||
krteczek Profil |
#13 · Zasláno: 20. 12. 2006, 18:38:29
jsem na tu konntrolu pozapomenul, už je to opraveno
krteczek |
||
bar Profil |
#14 · Zasláno: 20. 12. 2006, 20:30:51
krteczek
moc děkuju, jdu na to |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0