Vra

Ek het beheer oor die HttpServer maar nie oor die ApplicationServer of die Java-Toepassings sit daar, maar ek nodig het om te blok direkte toegang tot sekere bladsye op dié aansoeke.Juis, ek wil nie gebruikers outomatisering van toegang tot die uitreiking van vorms direkte KRY/POST HTTP versoeke aan die toepaslike servlet.

So, ek het besluit om die blok gebruikers, gebaseer op die waarde van HTTP_REFERER.Na alles, as die gebruiker is opgevolg binne die site, sal dit'n gepaste HTTP_REFERER.Wel, dit was wat ek gedink het.

Ek het geïmplementeer'n herskryf reël in die .htaccess lêer wat sê:

RewriteEngine on 

# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+\?.+ - [F]

Ek verwag om te verbied toegang tot gebruikers wat nie na die site, maar kwessie direkte KRY versoeke aan die "servlet1" of "servlet2" servlets met behulp van querystrings.Maar my verwagtinge skielik geëindig omdat die gereelde uitdrukking (servlet1|servlet2)/.+\?.+ het nie gewerk het nie op alle.

Ek is regtig teleurgesteld wanneer ek verander wat uitdrukking te (servlet1|servlet2)/.+ en dit het so goed gewerk dat my gebruikers geblokkeer nie saak as hulle oorkom die webwerf of nie.

So, my vraag is:Hoe doen ek kan bereik hierdie ding van nie toelaat dat "robots" met direkte toegang tot sekere bladsye as ek het geen toegang/voorregte/tyd om te verander die aansoek?

Was dit nuttig?

Oplossing

Ek is nie seker of ek dit kan los hierdie in die een gaan, maar ons kan terug gaan en weer as dit nodig is.

Eerste, ek wil om te herhaal wat ek dink jy sê en maak seker ek is duidelik nie.Jy wil om te weier versoeke te servlet1 en servlet2 is die versoek hoef nie die behoorlike referer en dit nie 'n soektog string?Ek is nie seker ek verstaan (servlet1|servlet2)/.+\?.+ want dit lyk soos jy is wat'n lêer onder servlet1 en 2.Ek dink miskien het jy is die kombinasie van PATH_INFO (voor die "?") met'n soektog string (na die "?").Dit blyk dat die PATH_INFO deel sal werk, maar die KRY navraag toets nie.Ek het'n vinnige toets op my bediener met behulp van script1.cgi en script2.cgi en die volgende reëls gewerk om te bereik wat jy vra.Hulle is natuurlik geredigeer'n bietjie aan te pas my omgewing:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

Die bogenoemde gevang alles verkeerd-referer versoeke te script1.cgi en script2.cgi wat probeer om te dien data met behulp van'n soektog string.Egter, jy kan ook stuur data met behulp van'n path_info en deur die plasing van data.Ek gebruik hierdie vorm om te beskerm teen enige van die drie metodes wat gebruik word met verkeerde referer:

RewriteCond %{HTTP_REFERER} !^http://(www.)?example.(com|org) [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule ^(script1|script2)\.cgi - [F]

Gebaseer op die voorbeeld wat jy probeer om te kry die werk, ek dink dit is wat jy wil:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

Hopelik sal dit ten minste kry jy nader aan jou doel.Laat ons asseblief weet hoe dit werk, ek is geïnteresseerd in jou probleem.

(BTW, ek stem saam dat referer sluit is swak sekuriteit, maar ek verstaan ook dat relaity kragte onvolmaakte en gedeeltelike oplossings soms, wat dit lyk asof jy reeds erken.)

Ander wenke

Ek het nie 'n oplossing nie, maar ek is weddenskappe dat die vertroue op die referrer sal nooit werk nie, want die gebruiker-agente is vry om dit glad te stuur of spoof dit om iets wat hulle sal laat in.

Jy kan nie vertel uitmekaar gebruikers en kwaadwillige skrifte deur hul http versoek. Maar jy kan analiseer wat gebruikers versoek te veel bladsye in te kort 'n tyd, en hul IP-adresse te blokkeer.

Die gebruik van 'n referrer is baie onbetroubaar as 'n metode van verifikasie. Soos ander mense het genoem, is dit maklik bedrieglike. Jou beste oplossing is om die aansoek te verander (as jy kan)

Jy kan 'n CAPTCHA te gebruik, of 'n stel 'n soort van koekie of sessie koekie wat hou van watter bladsy die gebruiker se laaste besoek ( 'n sessie sal moeiliker wees om spoof) en hou van bladsy view geskiedenis, en net laat gebruikers wat het die vereiste om die bladsy wat jy wil blok te kry bladsye blaai.

Dit vereis natuurlik dat jy toegang tot die aansoek betrokke te hê, maar dit is die mees onfeilbaar manier (nie heeltemal nie, maar "goed genoeg" in my opinie.)

Javascript is nog 'n nuttige hulpmiddel om te verhoed dat (of ten minste vertraging) skerm skraap. Die meeste outomatiese skraap gereedskap het nie 'n Javascript tolk, sodat jy kan dinge doen soos die opstel van verborge velde, ens.

Edit: Iets in die trant van hierdie Phil Haack artikel .

Ek vermoed jy probeer om die skerm skraap voorkom?

In my eerlike opinie is dit 'n moeilike een om op te los en probeer om op te los deur die nagaan van die waarde van HTTP_REFERER is net 'n pleister. Enigiemand gaan die moeite van die outomatisering van voorleggings aan die gang vaardig genoeg is om die korrekte Referer stuur van hul "outomaat" te wees.

Jy kan probeer koers beperking maar sonder om werklik die wysiging van die jeug om 'n soort van is-dit-'n-menslike validering (a CAPTCHA) dwing op 'n stadium toe jy gaan hierdie moeilik om te verhoed dat te vind.

As jy probeer om te verhoed dat die soektog bots toegang tot sekere bladsye, maak seker jy gebruik 'n behoorlik geformateer robots.txt lêer.

Die gebruik van HTTP_REFERER is onbetroubaar omdat dit maklik vervals .

Nog 'n opsie is om die gebruiker agent string vir bekende bots (dit kan kode verandering vereis).

check

Om die dinge 'n bietjie meer duidelik te maak:

  1. Ja, ek weet dat die gebruik van HTTP_REFERER is heeltemal onbetroubaar en 'n bietjie kinderagtig, maar ek is redelik seker dat die mense wat geleer het (uit my miskien?) Om automatisaties met Excel VBA maak sal nie weet hoe om 'n HTTP_REFERER ondermyn binne die tydsduur om die finale oplossing het.

  2. Ek het nie toegang / voorreg om die aansoek-kode te verander. Politiek. Het jy wat glo? So, moet ek wag tot die houer regte maak die veranderinge wat ek gevra het.

  3. Van vorige ervarings, ek weet dat die versoek veranderings twee maande sal neem in produksie te kry. Nee, gooi hulle Agile Metodologieë Books in hul koppe het niks te verbeter.

  4. Dit is 'n intranet app. So ek het nie baie kinders probeer om my prestige ondermyn. Maar ek is jonk genoeg as om te probeer om die prestige van " 'n baie fancy globale konsultasiedienste wat kom uit Indië", maar waar, vreemd, daar is nie 'n enkele Indiese daar werk te ondermyn.

Tot dusver is die beste antwoord is afkomstig van "Michel de Mare": blok gebruikers op grond van hul IPs. Wel, wat ek gedoen het gister. Vandag het ek wou iets meer generiese maak, want ek het 'n baie kangaroo gebruikers (spring uit 'n IP-adres na 'n ander) omdat hulle VPN of DHCP gebruik.

Jy kan in staat wees om 'n anti-CSRF teken gebruik om te bereik wat jy na.

Hierdie artikel verduidelik dit in meer detail: cross-site Versoek Vervalsingen

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top