A számítógép-programozásban a varázsszó egy olyan bemenet, ami egy egyébként rejtett funkciót támogat. A felhasználókat nem értesítik erről, mivel azt hiszik, hogy úgysem fogják megtalálni. Ez azonban nem igaz; ha elegen használják a programot, akkor előbb-utóbb felfedezik ezeket, akár véletlenül is. Számukra megmagyarázhatatlan módon, mintegy varázsszóra a program elkezd máshogy működni. Így lehet csalni a pályán, plusz pontokra, életerőre, erőforrásokra szert tenni egy játékban.
Háttere A varázsszavak használatának oka a szűk határidő. Ahelyett, hogy a programozó mélyebben belemerülne a problémába, és jobb megoldást találna, varázsszavakat kezd használni.
Például egy űrlap tesztelésekor a programozó arra utasíthatja a programot, hogy ha bankszámlaszámnak a csupa csillagot adja meg, akkor az automatikusan, a szám ellenőrzése nélkül haladjon tovább. Az idő szorításában lehet, hogy bent hagyja, és reméli, hogy nem találják meg. Azonban helykitöltőként használva mégiscsak ráakadhat, ezzel a program váratlanul ellenőrzés nélkül továbbengedi.
Elemzés A túl közeli határidő már a projekt kezdetétől nyomaszthatja a programozókat, amin a vezetőség vagy a felhasználók nem akarnak változtatni. Gyakori helyzetek, amikor ez az antiminta jelentkezhet: Null != null: vagy ennek bármely variációja, amikor egy adattípust nem bitenként hasonlítanak össze egy feltételezett azonos típussal. Ez előfordulhat ugyanabban a környezetben is (nyelv, fordító). Szám- és logikai típusok esetén ennek a problémának hosszabb története van, és a fordító ezt jelzi is. Nullázható típusoknál a nullnak történetileg különböző jelentései alakultak ki. A fordító efféle üzenetei nem elég informatívak, mivel túl általánosak. Nehéz őket visszanyomozni és megoldani, így a varázsszó bent marad. Ezt a problémát az üres objektum programtervezési minta oldhatja meg.Eric Freeman, Elisabeth Freeman, Kathy Sierra, Bert Bates; 2004, Head First Design Patterns, 1st ed., O'Reilly, Chapter 6, pg. 214, The Command Pattern, , Sarokba programozás: A terv egyszerűnek és logikusnak látszik, azonban kiderül, hogy logikailag hibás, mivel nem vett figyelembe bizonyos körülményeket vagy bemeneteket. Ezért a bemeneten biztonsági vagy más műveleteket végeznek, hogy megfeleljenek ezeknek a körülményeknek is. Egy robusztusabb terv kevesebb teret hagyott volna a programozóknak, és tovább tartott volna megvalósítani, mint ezt, és a KISS elvekkel is konfliktusba került volna, ami azt mondja, hogy ragaszkodjunk a kezdeti elképzelésekhez, és tartsuk egyszerűen a megvalósítást. Külső hozzáférés egy globális beállításhoz: Abban bíznak, hogy egy globális logikai változó, flag beállítása nem veszélyes vagy nem állítható át véletlenül. Erről a programnak magának kell gondoskodnia, hiszen erre nem lehet számítani, mivel idő kérdése, hogy valaki rátaláljon. A változót lehet lokálissá is tenni, így a varázsszó hatása csak annyi, mint bármely más bemenetnek.Andrew Cumming; 2007, SQL Hacks, 1st ed., O'Reilly, pg. 174, Prevent an SQL Injection Attack, , A felhasználónak így lehetősége adódik reprodukálnia a beállítást, úgy, ahogy más beállításokat is, melyeket a felhasználói felület megenged.
A bemenet formájának korlátozása segíti a varázsszavak elkerülését, viszont okozhatja a kemény kód szintén bosszantó hibáit. Példaként felhozható a telefonszámok esete (esetleges tagolással) vagy a neveké (egy név elő- és utónévből áll, nagybetűkkel kezdődik, kisbetűkkel folytatódik). Kivétel az a varázsszó, ami be van építve az érvényesítési kódba. A felhasználó is észreveszi, ezért nem próbál meg olyan bemenetet megadni, ami varázsszóként hat.
Az érvényesítésnek el kell kerülnie a kemény kód problémáit, mivel egyes felhasználók számára használhatatlanná teheti a programot. Például az irányítószámok ellenőrzése, ahol is az egyik országban megadott formátum okozhat problémákatBrian Knight, Allan Mitchell, Darren Green, Douglas Hinson, Kathi Kellenberger; 2005, Professional SQL server 2005 integration services, 1st ed., John Wiley and Sons, Chapter 5, pg. 129, Handling Dirty Data, , (Magyarországon négy, Görögországban öt számjegy), vagy hogy az Amazon.com nem szállít megrendeléseket a Petőfi Sándor utcába, mivel nem megfelelő karakterek vannak az utca nevében.
Szándékos alkalmazás A varázsszavak alkalmasak arra, hogy játékok rejtett kiegészítőit csalogassák elő, vagy rejtett beépített alkalmazásokat indítsanak el, easter eggeket jelenítsenek meg. A csaló kódok is ilyen varázsszavak. Vannak olyan esetek, amikor a programnak érvényes adatokat kell elfogadnia, például már kiosztott rendszámtáblákat, ekkor az elfogadásra váró felhasználót meglepetés éri.
Jegyzetek
Fordítás
Kategória:Programozási antiminták