Nola hobetu zure COREBlog bloga II: Kontaktu orria spam-a ekiditeko
Gure blogean guri idazteko <a href="mailto:emaila@domeinua.com">emaila@domeinua.com</a> motako esteka bat jartzen badugu, ziur egon gaitezke handik gutxira gure postontzian spam-a jasotzen hasiko garela. Irakurri hemen hori nola ekidin kontaktu orri baten bidez.
Spam-a posta elektronikoa duen eta interneten ibiltzen den ia edozeinek jasaten duen lakra da. Gure helbidea spammer-en eskuetara iritsiz gero, akabo! Baina nola lortzen du jendaila horrek gure helbidea?
Gizatxar horiek robotak dituzte uneoro interneta arakatzen (ez robotak zentzu hertsian ulertuta, programa automatikoak esan nahi da) mailto erreferentzien eta @ zeinuaren bila, eta horrela lortzen dituzte helbideak. Horregatik ez da ideia ona gure blogean gurekin kontaktatzeko mailto motako esteka bat jartzea.
Eta nola eman diezaiokegu gure blogaren irakurleari gurekin kontaktatzeko aukera, hori erabili gabe? Kontaktu orri baten bidez. Jarraian azalduko dut nola egin kontaktu orri bat Coreblog erabiltzen duten blogetan (Eibar.org-en ostatatutako edozeinetan, beraz).
Hasteko, gure bloga aldatzeko pantailan sartuko gara gure klabearekin. Hor Mail Host elementu berri bat sortuko dugu eta "MailHost" izena jarri, beste balioak defektuzko balioan utzita.
Gero sortu DTMLMethod elementu berri bat, "kontaktatu" izenarekin, eta bertan eduki hau idatzi:
<dtml-var standard_html_header>
<h3>Kontaktatu</h3>
<form method="post" action="kontaktatu2">
<table>
<tr>
<td align="right" valign="top">Izena:</td>
<td><input type="text" name="izena" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Posta elektronikoa:</td>
<td><input type="text" name="emaila" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Gaia:</td>
<td><input type="text" name="gaia" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Esatekoa:</td>
<td><textarea name="edukia" rows="10" cols="40"></textarea></td>
</tr>
<tr>
<td></td>
<td valign="top"><input type="submit" value="Bidali"></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>
Ondoren "kontaktatu2" izeneko beste DTMLMethod bat sortu, barruan hau idatziz:
<dtml-var standard_html_header>
<dtml-call "kontaktatu3(izena,emaila,gaia,edukia)">
Zure mezua bidali da<br />
Jarraitzeko, egin klik <a href="<dtml-var blog_url>">hemen</a>.
<dtml-var standard_html_footer>
Jarraian "kontaktatu3" izeneko Script (Python) bat sortu. Parametroetan "izena,emaila,gaia,edukia" jarri eta edukian ondokoa:
try:
mailhost=getattr(context,context.superValues('Mail Host')[0].id)
except:
raise AttributeError, "Mail Host object cant be found."
to_addr = guremaila@guredomeinua.com
mMsg = """To: %s
From: %s
Mime-Version: 1.0
Content-Type: text/plain;
blogetik bidalitako mezua
Bidaltzailea: %s [%s]
Gaia: %s
%s""" % (to_addr , emaila , izena, emaila, gaia, edukia)
mTo = to_addr
mFrom = emaila
mSubj = gaia
mailhost.send(mMsg, mTo, mFrom, mSubj)
Eta listo! Orain gure orri nagusian kontaktu orri horretarako linka jartzea besterik ez da falta.
Hala ere, hau ez da nahikoa. Honekin guri spam-a ez iristea lortuko dugu, baina gure blogera erantzunak idazten dituen jendea spammer-en esku uzten jarraitzen dugu. Izan ere, Coreblog-ek duen (nire ustez) akats bat medio, gure blogera erantzunak idazten dituen jendearen posta helbideak mailto erreferentziekin erakusten dira... eta webgune serioek jada ez dute horrelakorik egiten.
Hori konpontzeko bi gauza egin ditzakegu:
- Aldaketa txiki bat egin e-maila ez erakusteko
- Horrez gain, blogaren irakurleek erantzun duen jendearekin kontaktatu dezaten ahalbidetu kontaktu orriaren bidez
Lehenengoa egitea oso sinplea da. Ireki "comment_body" izeneko metodoa eta <div class="comments-post"><dtml-var "gettext('Posted by:')"><b> jartzen duen tokiaren ondoren eta </b> aurretik datorrena honegatik ordeztu:
<dtml-try>
<dtml-if "_.len(url)>0 or (REQUEST.form.has_key('url') and _.len(REQUEST.form.has_key('url'))>0)">
<a href="<dtml-if "REQUEST.form.has_key('url')"><dtml-var "removeHTML(REQUEST.form['url'])"><dtml-else><dtml-var url missing=""></dtml-if>"><dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if></a>
<dtml-else>
<dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if>
</dtml-if>
<dtml-except>
<dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if>
</dtml-try>
Bigarrena egitea konplikatuxeagoa da. Horretarako kontaktu orria erabili behar da, baina kontaktu orriari jakinarazi behar zaio nori bidali behar dion emaila, helbidea estekan erakutsi gabe, enkriptatuta. Aurrez aipatutako kontaktu orriko metodoak berridatzi behar dira eta beste metodo batzuk sortu. Jarraian azalduko dut prozesu guztia.
Hasteko, "comment_body" metodoan, aurrekoa jarri beharrean beste hau jarriko dugu:
<dtml-try>
<dtml-if "_.len(url)>0 or (REQUEST.form.has_key('url') and _.len(REQUEST.form.has_key('url'))>0)">
<a href="<dtml-if "REQUEST.form.has_key('url')"><dtml-var "removeHTML(REQUEST.form['url'])"><dtml-else><dtml-var url missing=""></dtml-if>"><dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if></a>
<dtml-elif "_.len(email)>0 or (REQUEST.form.has_key('email') and _.len(REQUEST.form.has_key('email'))>0)">
<a href="<dtml-var blog_url>/kontaktatu?norekin=<dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if>&emailanori=<dtml-if "REQUEST.form.has_key('email')"><dtml-var "enkriptatu(removeHTML(REQUEST.form['email']))"><dtml-else><dtml-var "enkriptatu(email)" missing=""></dtml-if>"><dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if></a>
<dtml-else>
<dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if>
</dtml-if>
<dtml-except>
<dtml-if "REQUEST.form.has_key('author')"><dtml-var "removeHTML(REQUEST.form['author'])"><dtml-else><dtml-var author missing=""></dtml-if>
</dtml-try>
Gero "enkriptatu" izeneko Script (Python) bat sortuko dugu, "emaila" parametroa hartzen duena eta hau daukana barruan:
klabea="87hugf9iv"
enkriptatua=""
for ind in range(len(emaila)):
enkriptatua=enkriptatua+str(100+ord(emaila[ind])+ord(klabea[ind % len(klabea)]))
return enkriptatua
Klabea nahi duzuna eta nahi duzun luzerakoa jar dezakezu. Beste script bat egin beharko dugu "dekriptatu" izenekoa, "enkriptatua" parametroa jaso eta eduki hau duena:
klabea="87hugf9iv"
emaila=""
for ind in range(len(enkriptatua)/3):
emaila=emaila+chr(int(enkriptatua[ind*3:ind*3+3])-100-ord(klabea[ind % len(klabea)]))
return emaila
Klabeak aurreko metodoan idatzi dugunaren berdina izan behar du. Eta bukatzeko, lehen sortu ditugun "kontaktatu", "kontaktatu2" eta "kontaktatu3" elementuak aldatu, honela:
kontaktatu:
<dtml-var standard_html_header>
<h3>Kontaktatu <dtml-if norekin><dtml-var norekin>(r)ekin<dtml-else>blogaren egilearekin</dtml-if></h3>
<form method="post" action="kontaktatu2">
<input type="hidden" name="norekin" value="<dtml-if norekin><dtml-var norekin><dtml-else>blogaren egilea</dtml-if>">
<input type="hidden" name="emailanori" value="<dtml-if emailanori><dtml-var emailanori><dtml-else><dtml-var "enkriptatu('guremaila@guredomeinua.com')"></dtml-if>">
<table>
<tr>
<td align="right" valign="top">Izena:</td>
<td><input type="text" name="izena" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Posta elektronikoa:</td>
<td><input type="text" name="emaila" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Gaia:</td>
<td><input type="text" name="gaia" value="" size="40"></td>
</tr>
<tr>
<td align="right" valign="top">Esatekoa:</td>
<td><textarea name="edukia" rows="10" cols="40"></textarea></td>
</tr>
<tr>
<td></td>
<td valign="top"><input type="submit" value="Bidali"></td>
</tr>
</table>
</form>
<dtml-var standard_html_footer>
kontaktatu2:
<dtml-var standard_html_header>
<dtml-call "kontaktatu3(norekin,dekriptatu(emailanori),izena,emaila,gaia,edukia)">
Zure mezua bidali da<br />
Jarraitzeko, egin klik <a href="<dtml-var blog_url>">hemen</a>.
<dtml-var standard_html_footer>
kontaktatu3:
Parametroak: norekin,norekinemaila,izena,emaila,gaia,edukia
Edukia:
<try:
mailhost=getattr(context,context.superValues('Mail Host')[0].id)
except:
raise AttributeError, "Mail Host object cant be found."
to_addr = norekinemaila
mMsg = """To: %s
From: %s
Mime-Version: 1.0
Content-Type: text/plain;
blogetik bidalitako mezua
Bidaltzailea: %s [%s]
Gaia: %s %s""" % (to_addr , emaila , izena, emaila, gaia, edukia)
mTo = to_addr
mFrom = emaila
mSubj = gaia
mailhost.send(mMsg, mTo, mFrom, mSubj)
Eta kitto!
Honekin ziurtatuta dugu spammer-ek ez dutela lortuko gure posta helbiderik ez guri erantzuten diguten jendearenik ere. Hala ere, ez da guztiz spama ekiditen. Nik herenegun nire posta helbidean spam-a jaso nuen, blogeko kontaktu orriaren bidez bidalia! Edozein modutan, spammer-ari jende mordo baten kontaktu orriak betetzea askoz zailagoa egiten zaio jende pila bati emaila bidaltzea baino, beraz uste dut (eta espero dut!) asko ez zaidala iritsiko... Baina nork daki, spammer-ak jartzen dizkiegun zailtasunak gainditzen joango dira eta agian laster kontaktu orrien bidez ere erraz bidaliko dute...
Aurreko artikuluak:
Arrazoia duzu, script-ak ez dira ongi agertzen testu egituratuaren renderizazioaren erruz.
Lehen kasuan, nik has_key nuen idatzita beti, baina batzutan lerro berean beste _ (underscore) bat agertzen da, orduan testu egituratu gisa interpretatzen du eta azpimarratuta bueltatzen, underscore sinboloak kenduta.
Bigarrenean, ind3 jartzen duen bi tokietan ind*3 behar du. Gertatu dena da bi asteriskoen artean dagoena kurtsibaz idatzi eta asteriskoak kendu dituela.
Eskerrik asko, Mikel. Orain zuzenketak eginda daude. Bertatik berriz kopiatuta, ondo ibili beharko lirateke.
Eta pozten naiz norbait aldaketa hau inplementatzen ari dela jakitean. Izan ere, spama oso arazo larria da. Nik lehengo lantokiko helbidea kontaminatuta neukan eta zabor-mezu piloa iristen zitzaizkidan (lehen foroek-eta ez zituzten neurri egokiak hartzen). Lantoki berriko helbideak urte eta erdi dauka eta ez zait spamik iristen, geroztik bai nik eta baita webgune gehienek ere neurriak hartzen ditugulako. Eta asko fastidiatuko lidake orain spama iristen hastea eibar.org-eko blog baten erantzuna eman dudalako. Beno, hau ez zait niri gertatuko nik erantzutean posta helbideaz gain blogaren url-a ere ematen dudalako eta egonez gero hori erakusten delako, baina beste askori gerta dakieke... Ohartarazi nuen horren inguruan sustatun ere, spam-ari buruzko artikuluari erantzunez, baina oraingoz zu zara bakarra (nik dakidala) zerbaitetan ari dena...