beveiliging tussen jquery en php bestanden.
Als ik een request maak met jquery $.ajax naar een php bestand. Is het voor het php bestand dan mogelijk om te controleren dat MIJN javascript bestand dit aanroept en niet dat het van een andere website afkomt?
als ik dus een .js heb staan met mijn ajaxcode op www.eenwebsite.nl/javascript.js en dit script roept mijn phpbestand aan op www.eenwebsite.nl/php/code.php wil ik dat mijn php controleert of het verzoek wel echt van www.eenwebsite.nl/javascript.js afkomt en niet dat het door iemand anders wordt aangeroepen. Is het mogelijk dat een php dit kan afvangen?
Heb al zitten googelen maar kom niet echt tot een goed antwoord.
alvast bedankt.
Je zou dit middels een sessie of 'functionele' cookie kunnen doen. Let wel dat JS op de client zeide gebeurt en PHP op de server zeide. Om dus te controleren of het om dezelfde browser/gebruiker gaat is een sessie aanmaken of een cookie weg te schrijven waar een random string in staat waarmee je valideerd.
Gewijzigd op 12/11/2012 15:24:13 door Chris PHP
Een voorbeeldje. Dit script vereist dat de Ajax-request gebeurt door de pagina die jij (de server) naar de gebruiker hebt gestuurd.
Je kan testen op volgende manier: met twee tabs van je browser.
Open deze pagina in tab 1. Open dan de zelfde pagina in tab2. Klik dan op de knop van tab 1. => php zal merken dat de session-variabele veranderd is (door tab 2) en zal de request weigeren.
Merk op: er zijn, zonder enige twijfel, betere oplossingen dan mijn script hier.
... maar het illustreert wel dat er mogelijkheden zijn met SESSION.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
session_start();
if (!empty($_GET['ajax'])) {
// ajax
if (!empty($_SESSION['code']) && $_SESSION['code'] === $_GET['ajax']) {
echo 'alles okay';
}
else {
echo "goed geprobeerd, maar 't zal niet lukken.";
}
exit;
}
else {
// genereert 10 tekens die vrij willekeurig zijn, maar sowieso veilig zijn; de tekens bevatten enkel cijfers en letters.
// voel je vrij om hier iets anders van te maken
$_SESSION['code'] = substr(md5(time() . 'Hello'), 5, 10);
}
?>
<!DOCTYPE html>
<html>
<body>
<input type="button" value="klik" id="klikbutton">
<div id="message"></div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#klikbutton").click(function() {
$.ajax({
url: 'index.php?ajax=<?php echo $_SESSION['code']; ?>' ,
success: function(message) {
$("#message").html(message);
}
});
});
});
</script>
</body>
</html>
session_start();
if (!empty($_GET['ajax'])) {
// ajax
if (!empty($_SESSION['code']) && $_SESSION['code'] === $_GET['ajax']) {
echo 'alles okay';
}
else {
echo "goed geprobeerd, maar 't zal niet lukken.";
}
exit;
}
else {
// genereert 10 tekens die vrij willekeurig zijn, maar sowieso veilig zijn; de tekens bevatten enkel cijfers en letters.
// voel je vrij om hier iets anders van te maken
$_SESSION['code'] = substr(md5(time() . 'Hello'), 5, 10);
}
?>
<!DOCTYPE html>
<html>
<body>
<input type="button" value="klik" id="klikbutton">
<div id="message"></div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
$("#klikbutton").click(function() {
$.ajax({
url: 'index.php?ajax=<?php echo $_SESSION['code']; ?>' ,
success: function(message) {
$("#message").html(message);
}
});
});
});
</script>
</body>
</html>
Bedankt!
Code (php)
1
2
3
4
5
2
3
4
5
$.ajax({
url: 'http://www.jouwsite.nl/ajax.php' ,
success: function(message) {
$("#message").html(message);
}
url: 'http://www.jouwsite.nl/ajax.php' ,
success: function(message) {
$("#message").html(message);
}
Gewijzigd op 12/11/2012 17:30:22 door - Ariën -
- Aar - op 12/11/2012 17:29:54:
Dat klopt inderdaad maar als ik het goed begrijp kan hij het wel met een eigen php bestand aanroepen en dat wilde ik eigenlijk vermijden. Alleen mijn script moet er gebruik van maken en niks anders :)
edit
--------
Nog iets gevonden:
$_SERVER['HTTP_X_REQUESTED_WITH']
dit geeft voor zover ik kan lezen aan dat het een ajax request is waardoor ik eventueel ervoor kan zorgen dat (externe) php bestanden niet mijn code kunnen aanroepen.
Gewijzigd op 13/11/2012 15:52:29 door ama saril