AJAX calls beveiligen?

Status
Niet open voor verdere reacties.

lordstyx

Gebruiker
Lid geworden
21 dec 2009
Berichten
15
Ik heb nu een aantal functies met AJAX, en het werkt allemaal lekker. Er is alleen een probleem. Twee van die functies zijn redelijk belangrijk en resulteren in een paar queries (in php) die uitgevoerd worden. Normaal gesproken kunnen deze niet gespamt worden, maar toen bedacht ik me dit:
Je kun in FireFox makkelijk de sourcecode van included .js files zien. Zo zou een persoon dus diezelfde functie op een eigen server zetten, en zo dus gewoon door f5 ingedrukt te houden die queries honderden keren laten uitvoeren.
Mijn vraag is dus hoe kan ik er voor zorgen dat die AJAX call alleen gebeurt als het van mijn scripts af komt?
Iets met IP loggen oid? Maar ik weet niet of dat gaat want het javascript wordt natuurlijk in zijn geheel naar die client verzonden :confused: (toch?)
 
AJAX calls kunnen alleen binnen een domein gedaan worden. Een gebruiker kan dus niet vanaf zijn server een AJAX-call naar jouw server doen.

[EDIT]
Als je een publieke applicatie maakt, zou je server dat eigenlijk wel aan moeten kunnen.

Daarnaast kun je je afvragen, zouden er überhaupt gebruikers zijn die dat doen. Ik heb nooit de drang gevoeld om zoiets te doen...
[/EDIT]
 
Laatst bewerkt:
Je zou eens moeten weten wat mensen doen voor geld ;)

Maar ik denk niet dat dat mij helpt. Dit is mijn huidige code:
Code:
function makeXMLObj() {
	var objXml = false; 
	try {
		objXml = new XMLHttpRequest();
	}
	catch (e) {
		try {
			objXml = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			try {
				objXml = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {
				alert("Sorry, but your browser phails to support AJAX.");
				return false;
			}
		}
	}
	return objXml;
}
function openFile(param) {
	var objXml = makeXMLObj();
	var src = 'http://domain.com/shb.php?wat=' + param;
	objXml.open('GET',src,false);
	objXml.send(null);
	return objXml.responseText;
}
function chngObjectText(id, param) {
	var het_obj = document.getElementById(id);
	var text = openFile(param);
	het_obj.innerHTML = text;
}

Zo kan een persoon dit toch letterlijk overnemen, en openFile() functie spammen?
 
Ik meende dat dit een error oplevert, aangezien je een aanroep doet naar domain.com, maar de pagina staat niet op domain.com .
 
haha, 'phails to support' :D:D


Anywho, zoals EB al zei, dit zou je app aan moeten kunnen. Daarnaast: de gebruiker kan ook gewoon 100x naar je homepage gaan om je brandwidth the drainen (ddos):
(...) waarbij zeer veel netwerkverkeer naar een site of netwerk wordt gegenereerd, waardoor veel bandbreedte van verbindingen wordt gebruikt, of verbindingen zelfs verzadigd raken.
(wiki)


En inderdaad, je kan beter het http://domain.com/-gedeelte weghalen van de call.



:thumb:
 
Laatst bewerkt:
Ik lees nu net dat dit alleen van toepassing is op het xmlHttpRequest object. Terwijl in IE een ActiveX object gebruikt wordt, dat dat wel kan.

Dan zou je inderdaad een controle kunnen inbouwen, maar dat verhindert niet dat er veel aanroepen worden gedaan. Dat kan hoogstens verhinderen dat er veel databasequeries uitgevoerd worden.
 
De hele url levert voor mij totaal geen problemen op, wss omdat ik mn LAN IP gebruik, maargoed.
Je hebt idd gelijk dat men ook net zo goed de website kan spammen, dus het heeft niet zo veel heel zin als je al een check kon inbouwen.

[edit]
Moet ik dan het pad opgeven t.o.v. waar de .js file is?
 
Laatst bewerkt:
Terwijl in IE een ActiveX object gebruikt wordt, dat dat wel kan.
security issues!!!1!one!~~1! :p Maargoed, het is wel 'handiger' dan xmlhttp :) - nu loop je steeds te *****n met php...


Mischien is het een idee om ipv. een GET een POST te maken naar je php pagina met query's (of wat het dan ook is). Dan kan je gelijk afkomstige refer checken ($_SERVER variables meen ik), of zelfs mischien een sessie.


@lordstyx: Vanaf je include pad, dus de HTML pagina die de <script src='...'></script> heeft.
 
Laatst bewerkt:
Maargoed, het is wel 'handiger' dan xmlhttp :)

Nu kan ik me vergissen of je verkeerd begrijpen, maar is het ActiveX object niet gewoon de enige mogelijkheid in IE en dus het enige alternatief voor het xmlHttp object?
 
jawel, maar ik bedoelde het als een 'win' voor IE t.o.v. van 'normale' browsers (ff, sf, gc, op) :)


[edit]voor de volledigheid: uiteraard kan je in de andere browsers wel iig in firefox een remote call maken, maar het is wel een... err.... gigantische omweg.[/edit]
 
Laatst bewerkt:
Ojee, probleem, ik gebruik him in verschillende files. Maakt niet uit, ik ben ff in de war. Over waar het script wordt aangeroepen. Het is namenlijk niet zo, dat dit AJAX script wordt aangeroepen van mijn eigen server. Het gaat ook niet om mij. Ik deel een include naar dit script uit aan mensen met een website, die allemaal hun eigen clients hebben. Het script wordt dan toch aangeroepen vanaf de client, en zou ik hun IP toch meekrijgen?
Wacht, de mensen met de website maken helemaal niet uit want de call is direct naar mijn server =/
 
Laatst bewerkt:
Okay, dus het idee is dit: (even voorbeeldje) Sjonnie heeft jou code op zn site gepleurt. Dit is de code:
HTML:
<script src='http://lordstyx.nl/foo/bar.js' type='text/javascript'></script>
In dat geval wordt dus vanaf Sjonnie's site de call gemaakt, naar bv. http://lordstyx.nl/doe.php. Nou...


dat wordt vervelend, want ik denk dat dat niet kan :( Zoals EB al zei, calls kunnen alleen naar je 'eigen' server/domein. Tenzij je dus in IE zit en de activeX gebruikt.
 
Laatst bewerkt:
Lol, dit is mijn eigen topic, maargoed ik zal het even duidelijk proberen uit te leggen.

Er zijn de volgende personen:
Ik, websiteowner a.k.a. A, surfer a.k.a. B

Ik geef een script aan A dat een pagina op de server van Ik aanroept.
B komt op de website van A, en ziet netjes wat er te zien valt. Nu is er een knop om het volgende stukje text te laten zien. Zodra B die knop indrukt, is er een AJAX call (via het script in eerste post) naar het bestand 'change.php' om de tekst te veranderen. Zodra echter change.php wordt aangeroepen, updated deze de database, hoe vaak dat stukje tekst is laten zien zeg maar.
Nu, B kan dit in principe duidelijk volgen door naar de sourcecode van de pagina's te kijken.
Hij zou dus de telling kunnen verknallen, door direct change.php aan te roepen met de juiste parameters (alweer gevonden in de sourcecode van de AJAX call script).
Ik wil voorkomen dat B dit zou doen. Alleen maakt het niet uit, want hij kan net zo goed f5 spammen, en daar doe ik ook niets tegen.
 
Hmm, ingewikkeld. Als ik een javascript include vanaf een andere server, moet ik dat javascript zien alsof het nog op die server staat, of bij de client is afgeleverd?
 
Hmmm, dat weet ik niet precies. Mn gok zou zijn dat het vanaf de 'aanroepende' site wordt gezien, maar sinds het opzich op jou domein staat, kan het ook anders zijn.

De enige snelle oplossing die ik kan verzinnen: testen! :thumb:
 
Ja ga ik zeker doen, moet ik wel ff wachten tot school weer begint, want ik denk niet dat mn buren het leuk vinden als ik aan kom bellen en vraag of ik ff hun netwerk kan gebruiken xD

hmm of misschien een proxy :rolleyes:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan