Jump to content

[JAVASCRIPT] Userscript ban: IP Check werkt niet?


Recommended Posts

Geplaatst:

Beste GTAGamers.

Ik werk aan een userscript, dat open op internet staat. Hiervoor mogen enkele personen GEEN gebruik maken, daarom probeer ik hun IP te blokkeren. Hiervoor gebruik ik dit in mijn userscript:

//IP CHECK
//HENK STINKT 
var ip = '<!--#echo var="REMOTE_ADDR"-->';
if (ip = '94.212.150.233') 
{ 
alert("STOP! Wij houden niet zo van Henk!");
window.open('http://www.youtube.com/watch?v=EK2tWVj6lXw');
window.close();
}

Dit zet ik dus in mijn userscript maar bij elk IP krijg ik dan de alert en window.open. Waar zit de fout? Moet dit soms in head? Hoe stop ik met innerHTML zo'n code van meerdere regels in head?

Alvast bedankt.

Tijdens het testen even alert(ip) ingevuld en dan krijg ik in beeld: <!--#echo var="REMOTE_ADDR"--> (in de alert)

Hoe is dit op te lossen?

>>> Door Thundercover: Berichten samengevoegd, gebruik voortaan de Edit- of Bewerk-knop.<<<

Geplaatst:

Ik ben niet goed in Javascript, maar ik dacht dat je altijd variables moest checken met 2 gelijktekens?

Geplaatst:

Probeer het zo 'ns.

//IP CHECK
//HENK STINKT 
var ip = '<!--#echo var=REMOTE_ADDR-->';
if (ip = '94.212.150.233') 
{ 
alert("STOP! Wij houden niet zo van Henk!");
window.open('http://www.youtube.com/watch?v=EK2tWVj6lXw');
window.close();
}

Geplaatst:

Tijdens het testen even alert(ip) ingevuld en dan krijg ik in beeld: <!--#echo var="REMOTE_ADDR"--> (in de alert)

Hmm ik ook. Ik weet niet zo veel van JavaScript, maar ik vond dit:

java.net.InetAddress.getLocalHost().getHostAddress();

Volledige code:

//IP CHECK 
//HENK STINKT  
var ip = java.net.InetAddress.getLocalHost().getHostAddress();
if (ip == '94.212.150.233')  
{  
alert("STOP! Wij houden niet zo van Henk!"); 
window.open('http://www.youtube.com/watch?v=EK2tWVj6lXw'); 
window.close(); 
}

(dus mét dubbele =)

Bij mij werkt ie

Geplaatst: (bewerkt)

Inderdaad, het moet met een dubbele =, dus ==. Dat is omdat je in deze if-statement iets vergelijkt, niet iets definieert. Als je iets definieert, zoals de regel erboven, doe je een enkele =.

De oplossing die RoL0 geeft zal niet werken, hier wordt javascript en java door elkaar gehaald. Het gaat hier om javascript, terwijl dat toch echt een java-statement is. In combinatie met de overige javascript zal het al zeker niet werken.

Het probleem zit 'm denk ik in waar je het script plaatst. Een deel van de javascript, te weten dit deel:

<!--#echo var="REMOTE_ADDR"-->

doet me erg denken aan een bepaalde vorm van HTML waarbij server-side een aantal bepaalde dingen kunnen worden uitgevoerd, een soort simpele PHP. Even zoeken, en ja, het is SHTML. Wat is het probleem? Ook in het wikipedia-artikel is te lezen dat je meestal zo'n bestand een extensie .shtml of .shtm moet geven, omdat het anders niet werkt. Wanneer het dus niet werkt? Als dit script in een .js of een .html/.htm bestand staat.

Een uiteindelijke versie zou dus als volgt zijn, in een .shtml-bestand:

//IP CHECK
//HENK STINKT 
var ip = '<!--#echo var="REMOTE_ADDR"-->';
if (ip == '94.212.150.233') 
{ 
alert("STOP! Wij houden niet zo van Henk!");
window.open('http://www.youtube.com/watch?v=EK2tWVj6lXw');
window.close();
}

Hier moet ik echter wel bij zeggen dat dit eigenlijk een server-side actie zou moeten zijn, dus ik zou adviseren dit toch echt te doen met php of htaccess, als je hier de mogelijkheid toe hebt.

EDIT:

ik heb die code van RoL0 nu even getest, en vreemd genoeg blijkt de functie wel te werken, echter geeft deze 127.0.0.1 terug, ofwel localhost. Echter, als je op google zoekt op de functie geeft het allemaal java-resultaten. Ik zou hier dus niet echt op vertrouwen. (Waarschijnlijk is het iets van java dat doorgegeven wordt aan javascript of zo... maar of het ook cross-browser (hetzelfde) werkt? Ik betwijfel het.)

Bewerkt: door marcootje
Geplaatst:

ik heb die code van RoL0 nu even getest, en vreemd genoeg blijkt de functie wel te werken, echter geeft deze 127.0.0.1 terug, ofwel localhost. Echter, als je op google zoekt op de functie geeft het allemaal java-resultaten. Ik zou hier dus niet echt op vertrouwen. (Waarschijnlijk is het iets van java dat doorgegeven wordt aan javascript of zo... maar of het ook cross-browser (hetzelfde) werkt? Ik betwijfel het.)

Het leek me ook al een beetje raar, maar lokaal werkte het. Nu ik het even snel heb geüpload naar een webserver geeft IE aan dat er een fout in het script zit er werkt het niet*. FF voert het script weel uit maar geeft (dus ook online) 127.0.0.1 aan (localhost). Niet gebruiken dus.. FF een site met mogelijkheden: http://javascript.about.com/library/blip.htm

Op veel sites kom ik dit probleem tegen. Tenzij je toch iets server-sides gebruikt is het voor zover ik heb gelezen niet mogelijk (in alle gangbare browsers) een client IP te krijgen.

*Kwam dit op een site tegen

in Firefox, Opera en Netscape mogelijk om het IP adres van de bezoeker te krijgen. Een interessante mogelijkheid, omdat surfen via een anonieme proxy hierdoor een stuk minder anoniem wordt. Deze Java/Javascript code wordt immers client side uitgevoerd, waardoor het "echte" IP adres wordt gebruikt en niet het IP adres van de anonieme proxy.

In Internet Explorer levert deze Javascript code een foutmelding op, omdat Internet Explorer's implementatie van Javascript het Java object niet ondersteund.

Is er een alternatieve Javascript code om het IP adres te verkrijgen die wel werkt in Internet Explorer? Het zal toch niet zo zijn dat Internet Explorer op dit punt veiliger is dan de alternatieve browsers

Vreemd genoeg werkt dit wel lokaal(?) Ook kwam ik een verklaring van de 127.0.0.1 in FF tegen: de java code geeft het lan adres; je krijgt dus alleen het goede adres als de desbetreffende pc rechtstreeks met internet verbonden is. Tegenwoordig heeft bijna iedereen een router. Ohja, interessant dingetje: als je een manier vindt om het client side te doen, hebben proxy's ook geen zin. Het is namelijk client-side :bier:

Geplaatst:

Die pagina geeft inderdaad mooi weer hoe je op verschillende manieren het ip-adres in javascript kan krijgen. Echter, en dat is weer deels naar de TS toe, als je bijvoorbeeld php hebt, waarom dan niet de afhandeling ook in php? Ik denk dat je wel een goede reden hebt dat je het in javascript wilt doen, maar zo niet: doe het server-side.

Voorlopige oplossingen dus:

- zet je script in een .shtml-bestand

- gebruik een server-side script

Geplaatst:

Precies! Dan zou ik gewoon een php bestand maken:

//IP CHECK  
//HENK STINKT   
var ip = '<?php echo $_SERVER['REMOTE_ADDR']; ?>';
if (ip == '94.212.150.233')   
{   
alert("STOP! Wij houden niet zo van Henk!");  
window.open('http://www.youtube.com/watch?v=EK2tWVj6lXw');  
window.close();  
}

Of de de extra '=' toevoegen aan je startpost en je extensie in '.shtml' veranderen, zou ook moeten werken (alleen vind ik shtml persoonlijk goedkoop staan :bonk: slaat nergens op maargoed..)

Ohja.. een proxy en je bent er doorheen, maargoed, dat hou je altijd (ga naar de pc van de buren enz.).

Geplaatst: (bewerkt)

Als je php tot je beschikking hebt zou ik het gewoon helemaal in php doen:

<?php
//IP CHECK  
//HENK STINKT   
$ip = $_SERVER['REMOTE_ADDR'];
if (ip == '94.212.150.233')   
{   
echo('<script type="text/javascript">alert("STOP! Wij houden niet zo van Henk!");  
window.open(\'http://www.youtube.com/watch?v=EK2tWVj6lXw\');  
window.close(); </script>');
die();
}
?>

Of iets dergelijks... kan ook met een header-location.

Het voordeel hiervan is dat het niet te omzeilen is door simpelweg javascript uit te zetten (aangezien er een die() onder staat). Met een header-location ben je helemaal af van de javascript, maar kun je geen alert op laten duiken. Allemaal voor en nadelen, hangt er van af wat je precies wil...

En inderdaad, een proxy is een lastig geval, en kan niet getriggerd worden (OF de proxy moet het ip-adres doorgeven via $_SERVER['HTTP_X_FORWARDED_FOR'] of zoiets, maar dat gebeurt meestal niet). Proxy blokkeren is dan de enige optie, maar ja wie daar aan gaat beginnen?

Bewerkt: door marcootje

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...