13. juni 2006 - 11:57Der er
5 kommentarer og 1 løsning
Variable variabler?
Hej
Jeg er begyndt at modtage meget form-spam på min hjemmeside. Jeg er ret sikker på, det er automatiseret, da spammeren omgår mit JS validering af inputfelterne (bl.a. er intet navn indtastet). Jeg vil selvfølgelig gerne undgå denne form for spam. Dertil har jeg en snedig plan ;-)
Pt. bruger jeg variablen fra submitknappen, til at trigge den funktion, der smider formindholdet i databasen. Min snedige plan går ud på, at lave variablennavnet dynamisk. Jeg har tænkt mig, at lave navnet til en md5-hash af datoen.
Derefter skal jeg have lavet en dynamisk funktion, til at smide formindholdet i databasen. Jeg aner dog ikke, hvordan jeg laver en "variabel variabel". Mit kode ser sådan ud (med alt lir fjernet):
<? if(isset($_POST['spamfree'])) { // valider og smid i database } ?>
<input name="<? print md5(date(d)); ?>" type="submit" value="Udbyd din visdom">
</form>
Hvordan får jeg variablen "spamfree" til at være en dynamisk md5-hash af datoen? (Jeg udvider den nok, så den godtager dags dato og datoen fra dagen før, så evt. personer, der begynder at skrive inden midnat og poster efter, ikke ryger i en fælde.)
Tak, det virkede med lidt tweaking: if(isset($_POST[md5(date(d))]) || $_POST[md5(date(d)-1)])
Troede faktisk, det ville være meget mere bøvlet!
Jeg overvejede også at sætte en hidden... jeg kan jo også bare banne ip eller lave serverside-validering af inputfelterne. Dog har jeg længe ledt efter en undskyldning, for at arbejde med variable variabler :-) Tror også denne løsning er mere langtidsholdbar. Det tager jo kun et kig i kildekoden at finde de hidden-values, det kræver at poste.
everytime you forget to pad a string, god kills a kitten..
det er: date("d"); ikke: date(d);
den eneste grund til at det virker er fordi du kører med for lavt error-reporting niveau.. ;)
_Alle_ strenge skal være omgivet af endten "-er eller '-er, ellers vil de blive opfattet som konstanter eller andre tokens - aka ikke strenge.. PHP, hvis den møder en udefineret konstant, går bare ud fra at du egenligt mente at det skulle være en streng, og konvertere for dig.. - men på et tidspunkt vil man faktisk bruge en konstant, og så fejler det...
Du har jo ganske ret. Jeg bøjer mig i støvet. Jeg har vist været væk fra php-gamet i for lang tid. Da jeg var ung og viril, ville jeg aldrig have lavet den fejl :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.