Jag har på ett flertal sajter haft problem med att spam-robotar letar upp ”oskyddade” formulär och fyller i dessa med en massa junk som sedan submittas. En lösning på problemet skulle vara att använda någon slags Captcha som är ett slags turing-test som avgör om användaren är människa eller spam-bot. Men detta känns som lite väl mycket overkill för mina sajter.
En lösning som jag använt mig av är att användaren får en input box där de måste fylla i årets år, ex: 2007, för att få gå vidare. Den lösningen har fungerat bra och innebär inte särskilt mycket kod för mig som utvecklare. Men det innebär ett extra steg för användaren som kan upplevas som jobbig eller onödig. Så jag undersökte om det finns ett alternativ som innebär lite kod samt att användaren slipper mata in ytterligare uppgifter.
Den enkla lösningen är att lägga in en extra textarea-kontroll i formuläret som inte visas för användaren genom CSS. Självklart så kan inte spam-roboten hålla sig ifrån att fylla även denna med junk eftersom dom vanligtvis inte förstår sig på CSS. När formuläret sedan valideras på server-sidan så kontrollerar man om fältet är ifyllt eller inte. Om det är ifyllt så är det en spam-robot på sidan och annars är det en människa.
I formuläret:
<textarea name=”to_adress” style=”display: none;”></textarea>
I formulär-kontrollen
if($_REQUEST["to_adress"] == ””)
{
// Människa
} else if($_REQUEST["to_adress"] != ””)
{
// Robot
}
Detta är en fast-and-dirty lösning och se det som en sådan. Använd Captcha eller något mer avancerat om du vill ha en mer avancerad kontroll. Men till enkla low-profile formulär så funkar detta alldeles ypperligt.
Samma lösning i .NET bör fungera enligt följande:
I formuläret:
<textarea runat=”server” id=”to_adress” name=”to_adress” style=”display: none;”></textarea>
eller
<style type=”text/css”> .gommig {display: none;}</style>
<textbox Runat=”server” CssClass=”gommig” TextMode=”MultiLine” id=”to_adress2″></textbox>
I formulär-kontrollen;
// Alt textarea
if( to_adress.Value == ”” )
{
// Människa
}
else
{
// Robot
}
// Alt textbox
if( to_adress2.Text == ”” )
{
// Människa
}
else
{
// Robot
}