Biztonságos ajax hívások használata Drupal környezetben

Fabio képe

Egy modul fejlesztése közben döbbentem rá, hogy a session kezelés az ajax hívásoknál nem működik, azaz csak anonymous userként jelenik meg a drupalban a hívás.

Ezzel kapcsolatban találtam egy drupal_get_token() függvényt, ami erre lehet megoldás.

1. Szerver oldalon generálok az aktuális időpont meg valami salttal egy tokent és azt lementem egy $_SESSION változóba.

2. Ezt a tokent kiíratom a kliens oldalra, mint javascript változót:

3. Ajax hívásnál indítok paraméterként hozzácsapom a javascript változó értékét az átküldött paraméterekhez.

4. A hivott oldal először lefuttatja a drupal inicializálást, majd ellenőrzi, hogy a küldött token megtalálható-e a {sessions} tábla valamelyik rekordjában a session mezőben.
Ha igen, akkor a megadott user hívta az oldalt, különben anonymous.
A lekérdezés visszaadja a user uid-ját, aminek alapján betöltöm a user_load() fv-nyel a usert és leellenőrzöm a jogosultságait a user_access() fv-nyel.

Szerintetek működik-e?

Itt van egy kis példakód hozzá:
http://www.fzolee.hu/framework/biztonsagos_ajax_hivasok_hasznalata_drupa...

Drupal verzió: 
york képe

A drupal a session adatokat adatbazisban tarolja, es onnan szedi elo.
Az AJAX hivasok kiszolgalasat is a a drupal vegzi, akkor ugy mukodik, mintha egy tetszoleges oldalt toltenel le.

0
0
Fabio képe

Igen tudom, hogy a {sessions} táblában tárolja, a session-t, de valamiért az ajax hívás esetén a kiszolgáló oldalon ha a drupal rendszert inicializálom a drupal_bootstrap() függvénnyel, a $_SESSION változóban nem jelennek meg azok a változók, amely az oldal generálásakor korábban a sessionbe bekerültek.

0
0

Fábián Zoltán
www.fzolee.hu

pp képe

próbáld ki:

  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
  print_r($_SESSIONS);

Szerintem ott rontottad el, hogy kiadtál egy session_start() hívást az elején tök feleslegesen.
Egyébként továbbra se tartom jó ötletnek, hogy ez egy külső fájlba teszed és nem egy callback függvényt írsz rá. (lásd hozzászólásom a bejegyzéshez)

pp

0
0
Fabio képe

Igaz a session_start bolondította meg. A callback függvényt is megnézem.

Fabio

0
0

Fábián Zoltán
www.fzolee.hu

alippai képe