Autor Zpráva
final
Profil
Zdravím,
pokiaľ mám takúto štruktúru php súboru
if (isset($_POST['request')){
  $rq=$_POST['request'];
  $id=$_POST['id'];
    if ($rq=="data"){
      $result=dibi::query("select * from data where id='$id');
      $row=$result->fetch();
      echo $row['data'];
    }
}
dokáže sa niekto cudzí dostať k dátam?(či už cez js alebo php)

Moderátor Chamurappi: Titulek „(jquery) requesty“ nevystihoval podstatu dotazu. Příště zkus prosím vymyslet lepší.
Kcko
Profil
final
Ano, třeba pomocí knihovny CURL
shaggy
Profil
final:
Nerozumiem, či pri spustení toho php súboru uvidí tie isté dáta, ako keď ho ty voláš cez javascript? Áno, ak predá správny parameter, tak to uvidí. Javascriptové volania sú prakticky rovnaké ako tie, ktoré vykonáš ty otvorením stránky v prehliadači.

Inak ten kód je dosť divný, na treťom riadku zisťuješ či sa $rq = "data" a ak áno, tak z databázy vyberáš záznam, kde id = 'data'? Si si istý, že to tak má byť?
final
Profil
shaggy:
nie to bol len rýchly príklad :) v skutočnosti je to inak..
Kcko:
dá sa tomu nejak zabrániť?

Napadol ma príklad:
-mám stránku "hľadanie pokladu"(nič lepšie ma nenapadlo teraz-.-),
-v db mám 500 riadkov s indíciami
-každý deň zobrazujem 1 náhodnú indíciu(v php sa vygeneruje náhodné číslo)
-ide mi o to, aby si niekto pomocou requestov nezobrazoval stále náhodné indície - aby to teda bolo fér voči všetkým
ako tomu zabrániť?
shaggy
Profil
Tak nezobrazuj indície na základe id (alebo iného parametru) prenášaného cez url (alebo cez post), ale urči vždy jednu indíciu pre ten konkrétny deň a tú zobraz.
Teraz nap. voláš indicia.php?id=253 a zobrazíš im 253. indíciu. Každý, kto sa len trochu vyzná, si vie pozrieť aj iné indície.

Lepšie riešenie je, že budeš napríklad vyberať náhodnú indíciu z db (z tých, ktoré ešte neboli použité) a priradíš k nim informáciu o tom, že bola použitá práve v ten deň. Vďaka tomu budeš vedieť zobrazovať v jeden deň tú istú informáciu, v ďalší deň inú a nikto ďalší sa nedostane k ostatným indíciám.
final
Profil
No len problém je v tom, že ja denne zobrazujem neobmedzene náhodných riadkov(a náhodné číslo sa môže opakovať)..(hento bol len príklad)
shaggy
Profil
final:
Tak presne popíš (nie kód, popísať), ako tvoja aplikácia funguje, čo generuješ, či je to rovnaké pre všetkých používateľov atď. a my ti možno poradíme.
final
Profil
Fajn,
-užívateľ príde na stránku
-cez jquery(ajax) sa mu zobrazí obsah náhodného riadka z db-zobrazí sa mu otázka a 3 odpovede
-užívateľ vybere jednu odpoveď
-zobrazí sa mu ďaľšia náhodná otázka
ide mi o to aby si užívateľ v žiadnom prípade nemohol dopredu zistiť otázky z databázy
_es
Profil
final:
ide mi o to aby si užívateľ v žiadnom prípade nemohol dopredu zistiť otázky z databázy
To pri takom spôsobe zabezpečenia nie je možné. V princípe mu stačí si stránku otvoriť v dvoch oknách prehliadača. Ani zložitejšiu aplikáciu v JS neuchrániš voči tomu, aby si ju užívateľ upravil.
final
Profil
_es:
To pri takom spôsobe zabezpečenia nie je možné.
A pri akom áno?
final
Profil
Hm, nikto mi nepomôže?-.-

mňa zatiaľ napadlo niečo takéto:
-do tabuľky v db by som si pridal stĺpec key ku každému riadku a ukladal tam zašifrované(md5) id aktuálneho riadku
-a v php by som vždy len znova vytvoril ten istý kľúč a zobral dáta z db
-malo by to zmysel?(dokázal by sa niekto dostať k dátam cez súbor data.php?)
shaggy
Profil
final:
Stačí zistiť, že napr. hashuješ id riadka a potom si s ktokoľvek môže pozerať aj iné otázky.
Stále nechápem princíp tvojej aplikácie - ako identifikuješ používateľov? Nie je tam žiadne prihlasovanie? Čo mu zabráni otvoriť si tvoj test v inom prehliadači a dávať stále refresh (tak si pozrie akúkoľvek otázku a bude na ňu vedieť odpoveď) a v tom "svojom" prehliadači bude na ňu odpovedať správne.
Aj keď nechápem, čo sa stane, ak si pozrie aj iné otázky - je tam nejaký obmedzený čas na odpoveď? Lebo ak nie, tak nevidím zmysel v tom, pozerať si otázky dopredu.

Pri bežných testoch to funguje takto:
- používateľ sa prihlasuje (čiže ho vieš vždy identifikovať)
- ak odpovedá len napr. na 20 otázok z 1000, tak si do ďalšej tabuľky zostavíš zoznam, kde pre toho používateľa zapíšeš id otázok (všetkých 20) a k nim aj jeho odpovede. Pri každej odpovedi mu zobrazíš vždy len tú nasledujúcu, na ktorú ešte neodpovedal.
- vieš to aj ošetriť, ak zadá id nasledujúcej otázky (z tej svojej kolekcie 20 otázok), ty zistíš, že na predchádzajúcu ešte neodpovedal a nezobrazíš mu ju.
final
Profil
shaggy:
áno, je tam klasické prihlásenie, v druhom prehliadači si nepozrie otázku..(netreba riešiť prečo)
ale potom prakticky, pokiaľ pomocou CURL neprelomí prihlásenie, tak sa nedostane k tým dátam áno?

Stačí zistiť, že napr. hashuješ id riadka a potom si s ktokoľvek môže pozerať aj iné otázky.
samozrejme, že by som to zahašoval tak, aby to nebolo zistiteľné(napr. nejaké slovo+id ect..)
shaggy
Profil
final:
Ak je tam prihlásenie, prečo to neriešiš tak, ako som napísal?
final
Profil
shaggy:
Ale ja mám situáciu, že sa otázka môže opakovať

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0