Észlelésére és megelőzésére a használata több ablakot és a böngésző füleket webes alkalmazások,

Szeretném bemutatni Önnek a fordítása a cikk Codeproject milyen problémák merülhetnek fel, ha több ablak vagy a böngésző fülek egyetlen munkamenet lehetővé teszi a felhasználó számára, hogy korlátozza a webes alkalmazások és megoldások csak egy ablak, hogy megakadályozzák ezeket a problémákat.







A fejlesztés a webes alkalmazások, számos különböző biztonsági problémák, amelyeket meg kell emlékezni. Az egyik szabály kimondja:

„Limit felhasználó egy böngésző ablakot”

HTTP nevezzük hontalan protokollt, mert minden egyes lekérdezés lefut függetlenül ismerete nélkül milyen kérelmet nyújtottak neki. Since HTTP kezdetben nem tárol adatokat az állami, hogy van néhány hátránya, amikor a biztonság és a teljesítmény a webhelyen. A helyettesítés az ülés, számos kérdést és választ adott a verseny csak néhány a felmerülő problémákat a használata több ablakot vagy a böngésző fülek egyidejűleg.

Két probléma, hogy hogyan kell megtiltani a több ablak vagy fülek:

    1. Hogyan tudjuk megkülönböztetni két kérelmet (GET vagy POST) arról, hogy a szerver oldalon, és megtalálja érkezett a kérés, ugyanabban az ablakban, vagy egy új lapot?

2. Hogyan megállítani a felhasználó, aki megpróbálja, hogy kezdeményezzen egy új kérelmet (GET vagy POST) két különböző windows kliens oldalon?

      Az alábbiakban egy példát az intézkedéseket, amelyek a felhasználó követheti, hogy hozzon létre egy új ablakban vagy böngészőlapon:

Megjegyzés: Az összes nyitott ablakot a fenti parancsokkal azonos session / cookie-kat a folyamat kommunikál a szerverrel. Amikor létrehoz egy új lapot / ablak böngésző a pontos másolata az eredeti oldalra.

A döntés, hogy azonosítsák és megakadályozzák, hogy a több lap vagy ablak webböngésző egy webes alkalmazás

Két módja van, hogy tudjuk használni egy webes alkalmazás:

Részletes, lépésről-lépésre:

Először kért Default.aspx oldalon.

Oldal load esemény kerül végrehajtásra, a következő script:

A Default.aspx.cs van funkitsya GetWindowName (), amely visszaadja egyedi nevet.

Amikor az oldal betöltődik az első alkalommal window.name Default.aspx tartalmaz null értéket ( „”). A szkript állítja window.name érték „default”, és megmutatja magát, ugyanabban az ablakban újra. Most, az egyedi nevét az ablak be van állítva (a funkció használata a szerver oldalon GetWindowName ()) és a nyitott oldal Home.aspx.

Default.aspx script azonnal zár nyitása után Home.aspx.

Megjegyzés: Minden alkalommal, amikor megnyit egy új ablakot window.name üres értéket ( „”). Ha window.name ürítse ki az Internet Explorer 7 és újabb egy visszaigazoló üzenetet:

De az alábbi szkriptet akkor biztos lehet benne, hogy a kérdés nem lesz beállítva, és az ablak automatikusan bezáródik.

Minden oldalon (kivéve Default.aspx), akkor használja a következő szkriptet a fejrész.

És az alábbi kódot a megfelelő kód mögött (Home.aspx.cs):

2. HTTP fejléc Referer szerver oldali validálás

Ez lehetővé teszi, hogy a szerver lista létrehozásához linkek annak különböző igényeinek. És ez lehetővé teszi, hogy nyomon kövesse a „rossz” linkeket.

Ha a kérelem nem egy mező hivatkozó ez azt jelenti, hogy a kérelmet nem keletkezett ezekkel a beállításokkal:

(Megjegyzés: Amikor megnyitjuk az oldalt egy új ablakban vagy lapon a középső vagy a jobb egérgombbal az érték lesz elérhető UrlReferer De window.name üres lesz, és ez az állapot kerül feldolgozásra a kliens oldalon a forgatókönyvet, hogy tettük ezt az oldalt.).

következtetés

A leírt megoldás lehetővé teszi a felhasználó számára, hogy megtiltsa a több, mint egy böngésző ablakot. Ugyanakkor érdemes megjegyezni, hogy mindegy nincs 100% -osan megbízható munkamódszer felderítésére és megelőzésére a használata több böngészőablakot belül ugyanezt a kérelmet.

Hozzászólás navigáció

Magyarázd meg nekem, miért így?

Mi a projekt éppen ellenkezőleg, küzdünk, hogy a felhasználót, hogy nyissa meg több lapot.

Én személy szerint mindig feldühít az ilyen korlátozások.

A fő probléma az, hogy én a Ctrl-N felhasználó kap egy pontos másolatot a megnyitott ablakokat.
A felhasználó volt, hogy mi ez a lépés a folyamat ebben az ablakban. Például, meg kell tartani a felhasználó át egymást követően 3 lépésben.
És ő már a második lépésben. A felhasználó megnyomta a CTRL-N, és kaptunk egy másik példányát ablakok a második lépést, és csak nem tud különbséget tenni a két ablak egymás és az egész menete összecsukódik, amikor a felhasználó elkezdi az ablakok közötti váltáshoz, majd nyomja meg a „Tovább”







Tin ... amit az emberek nem így valaha. Mi WindowName, UrlRererrer, hogy te is könnyen helyettesíti, ha valaki kell lennie.

Lásd jobb az építészet az alkalmazás a megfelelő platform kiválasztása, stb

„Limit felhasználó egy böngésző ablakot” - amikor ez általában egyenes csoda?

A helyettesítés az ülés - ha nem megoldani ezt a problémát
többszörös kérelmek és válaszok - ugyanúgy oldotta meg ezt a problémát? (Ha jól értem ez a DDoS támadás)
Adatok verseny - valószínűleg értéktelen alkalmazás architektúra

Ha szeretné, hogy korlátozzák - ez egy kulcsrakész megoldás 🙂
Általában, ha egy felhasználó megnyitotta a forma kiválasztását bármely tárgy és a „klón” oldalt egy másik böngészőben lapon. Rákattintottam az első fülön a „Mentés”, majd a második is. Melyik fül a „nyerő” az adatok mentésekor? Mi lesz valamiféle „köztes” adat, amely szükséges, ha menteni az oldalt, és már meg is változott, mielőtt megnyomja a „Mentés” az első oldalon?
Ez nem csak egy versenyképes adattárolást, a felhasználó pontos másolata az első oldalon, és nem tudjuk megkülönböztetni, hogy az eredeti.
A HTML 5, hogy megoldja ezt a problémát, akkor az ügyféloldali tárolás, amely nem klónozott hogy hozzon létre egy splash oldalt.
És ez megtörtént, csak hogy megoldja a problémát a fent leírt. Mondd el, mit építészeti megoldás lehetővé teszi számomra, hogy a klón az oldalt, és folytassa a műveletet két teljesen azonos oldalak roncsolása nélkül összefüggésben, és én nagyon hálás lesz neked!

Nos, nézzük meg példaként.

1. Pro szerkesztési formák:
Mondjuk mi a szerkesztés felhasználói lapot, töltse ki a mezőket.
Clone oldal.
Az első oldalon kattintson a Küldés gombra.
Ha minden jól megy már a frissítés az adatbázisban.
A második oldalon kattintson a Küldés lehetőségre.
Ha minden jól megy nálunk egy másik frissítése az adatbázisban.
Összesen: beszúrva két felhasználó.
Én a pajzs ilyen viselkedés teljesen logikus.

És ez a felhasználó problémát, ő egy és ugyanazon tárgy kétszer frissítik.

Nos, ha a probléma, ahogy leírták természetesen nem probléma egyáltalán, és a rendszer úgy viselkedik pontosan úgy, ahogy leírják.
Most tegyük fel, hogy van egy helyzet kicsit más (így például az első, amely a fejlesztõk HTML5 szabvány):
A felhasználó az oldalon repülőjegyeket árusító, és kinyitotta a két fül (Oldal klónozása egy másik lapon). Mivel a felhasználó válthat egy lapról a másikra, és azt, hogy az egyik lap a másik lehet olyan helyzet, amikor véletlenül vagy szándékosan zárja ki az egyik fület, és a második látni fogják egészen biztos, hogy nem vesz jegyet. Ez potenciálisan vezet az a tény, hogy a felhasználó vásárolni két jegyet egy helyett ... Ha lenne egy olyan mechanizmust, amely lehetővé teszi, hogy meghatározza, hogy a fül már „klónozott” tudtuk, hogy a felhasználó egy figyelmeztetést, és ne végezzen egyéb intézkedéseket, amelyek megakadályozzák egy esetleges hiba a felhasználó intézkedéseket .
Vagy egy másik példa: van egy többlépcsős varázsló, az állapot az objektum, amely kezeli a varázsló tárolja valahol a munkamenet, hivatkozva egy adott oldal. Ha a felhasználó a klón az oldalt, akkor kap két megkülönböztethetetlen más oldalak foglalkoznak ugyanazzal a témával, ugyanakkor és ugyanabban az időben változó részei. Ha az adatok mentése az egyik oldalt, akkor esetleg kap egy érvénytelen tárgy a memóriában. Ennek megelőzése érdekében, akkor ellenőrizze az aktuális állapota az objektum, és mi várható, ha elküld egy kérést az oldalt. De újra, ha a téma nagyon összetett, és olyan sok területen, például ellenőrző is kihívást jelent. Ebben az esetben érdemes lehet megtiltani a nyitó több lapra ezeket a kritikus oldalakat.

Nos, itt is adtál példát is megvalósítható, csak a klónozott lapok gond nélkül.

A jegyek: írsz „amikor véletlenül vagy szándékosan közel az egyik fület, és látta, a második lesz teljesen biztos, hogy a jegy megvette.”
Van például a fizetési megy keresztül a „kosárba”, ahol a felhasználó ad különböző tételeket. És amikor az egyik fül tartja a fizetési törlődik a kosárból, és vásárlást adatok másolása már a kívánt helyre. Tehát, ha rákattint egy másik lapra ismét fizetni, akkor egy hibaüzenet, hogy a bevásárló kosara üres.

A többlépéses varázsló: sdes igen, ez nem csak a varázslók. Figyelembe kell vennünk egy csomó körülmények között és helyzetekben. Itt és előre / hátra a böngésző felhasználó rákattinthat, és egy új lapot nyit, ez a vágya.
De senki sem mondta, hogy a program könnyen. Azt hiszem, ha csinálsz komplex varázsló, így próbálja ki, és észre a megfelelő módon, és nem korlátozzák a felhasználó számára.
Saját projekt egy komplex varázsló, de a logika a kódot nincs sok, de sokat.

Általában úgy tűnik nekem mindegy, nem szükséges korlátozni a felhasználók.

Nos, én nem értem, Vadim, ha úgy döntött, hogy kiadja több lap által „nyugtalan” programozás, akkor a becsület és a dicséretet! Csak itt rengeteg példa van, ahol a felhasználó nem szükséges megismételni a fület, így hol a korlátozásoknak a felhasználó? Miért tartott egy kört néhány kosarat, hogy bolond magát algoritmusok? Mivel az írás, hogy a programozás - nem könnyű folyamat, így nincs értelme bonyolultabbá tenni (IMHO) :).

Valami nem értem ezt a kódot. Biztos, hogy ez a kód működik? És általában, ha a felhasználó megnyit egy lapra. Tab kap az azonosítóját, akkor rögzíteni kell az ülés a szerver oldalon. Ezután a felhasználó bezárja a fület, és nyissa meg az oldalt újra. Mivel ez a munkamenet kód már a szerveren tárolódnak, megkapjuk InvalidAccess, azaz Hozzáférés a webhely le van tiltva egyáltalán. A probléma megoldása a révén localStorage (a jStorage.js támogatása régebbi böngészők). Amikor kinyitja bármelyik oldal mindig állítsa a globális változó módosítja lehallgatás, majd elküldte a visszhang kérés (a beállítási változó típusú echo = random ()). Ha megkapja a visszhang válasz (egy másik lapon az azonos lehallgatás funkciója változó beállításával block = random ()), ez azt jelenti, már nyitott egy másik lapra, és blokkolja a hozzáférést a webhely. Csak van egy árnyalatot, hogy egyes böngészők, mint az IE a függvényt lehallgatási még egy változó készlet ugyanazon a lapon, más böngészőt nem, így meg kell összehasonlítani a random () érkezik, és a kapott érték, ha azok megegyeznek, akkor ezt fogja kérni az ugyanazon a lapon ha nem egyezik, akkor a válasz érkezett egy másik lapra. A kód működik, és minden él a böngészők. A hátránya az, hogy ez nem egy szinkron kérés-válasz csere, és a válasz jöhet egy kis időt, vagy nem jön egyáltalán (ha csak egy lap), így az oldal megjelenítésekor, a forgatókönyvet kezd dolgozni, majd (például 1 másodperc) visszhangozzuk választ, és blokkolja az oldalt. Kiderült villogás. Az új Firefox böngészők kivételével mindenhol van egy késés a Firefox és az új és a régi változat feldolgozása azonnal. Általában a kivitelezési munka, de nem tökéletes. Ideális megoldás tűnik itt.