Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 15 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok NapísalOffline : 22.12.2009 16:39

Zdravím.
mam taky problém, a riešiť ho naozaj neviem.

mám dva súbory, a to 1.php a 2.php.

funguje to tak, že prídete na 1.php, odošlete informácie (pomocou AJAX kodu) na subor 2.php.
v tom 2.php sa informácie generujú NAHODNE a potom sa ulozia do txt suboru, aby som ich mal.
Ale teraz nastáva problém ten, že niekto si môže spraviť
form action="2.php" a vymení mi záznam za iný. A to je fakt problém.
Spolahlivé riešenie ako tomu predísť som nenašiel.
Predostriem tu dve svoje riešenia a to boli:

1. najprv HTTP referer, to ale zlyhalo - pozrite napriklad na firefox addon Refcontrol a uz jsme doma, toto sa škrtá.

2. na 1.php som isiel cez session, a overoval ju na 2.php, tu bol problem v tom ze niekto prisiel na 1.php a teda session ostala, a form actionom to zmenil z ineho svojho suboru, takze toto tiez stratilo efekt.

ja uz naozaj neviem nejake bezpecne riesenie, kedze su tie informacie nahodne tak to je problem...
neporadil by mi niekto prosím?


Offline

Skúsený užívateľ
Skúsený užívateľ
php data

Registrovaný: 09.07.08
Prihlásený: 17.01.15
Príspevky: 1585
Témy: 96
Príspevok NapísalOffline : 22.12.2009 17:12

fakt som sa snažil, ale nepochopil som...







_________________
neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 22.12.2009 17:20

Ani ja som nejak extra neporozumel. Skús použiť tokeny. Teda vygeneruješ reťazec, ktorý uložíš do DB (alebo session), a zároveň pošleš do formulára ako hidden input. v 2.php overíš či číslo, ktoré prišlo z formulára existuje v DB (alebo session). Samozrejme treba nastaviť časovú platnosť tokena, napr. na 10 min. O tokenoch sa na internete ešte veľa dočítaš ...


Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 22.12.2009 17:57

ospravedlnujem sa za chaoticke popisanie problému, ale v podstate ste pochopili.
hej tokeny to bude asi ono...ze ma to vobec nenapadlo.


Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 22.12.2009 18:54

Ale problem je v tom, ze v tom 1.php mam ten ajax kod, a ja musím dať potom niečo v tomto zmysle:

xhr.open('POST','2.php?id=<?php echo $_GET['id'] ?>&pp=<?php echo $token ?>',true);

no a ked si to dotycny otvorí vo firebugu, hned vidí napr. tvar 2.php?id=1&pp=XJFL-456

a to zadá do form actionu, a uz je tam,.


Offline

Čestný člen
Čestný člen
php data

Registrovaný: 21.02.06
Prihlásený: 08.12.14
Príspevky: 5404
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 22.12.2009 19:48

Keby si v 1.php inicializoval nejakú premennú v SESSION a v 2.php kontroloval, či je táto premenná nastavená?
A ak to chceš ochrániť proti viacnásobnému zavolaniu, tak predávať tomu súboru 2.php nejaký token, ktorý sa bude môcť použiť iba raz.







_________________
Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme.
Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 22.12.2009 20:05

mal som to vymyslené tak že na 1.php sa vygeneruje token a uloží do db, a v 2.php bude kontrolovat ci je v linku ten co bol vygenerovaný, ak hej tak by sa potom stejne zrušil.


Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 25.12.2009 18:01

hej shaggy ale pocuj, najvacsi problem v tych tvojich rieseniach dvoch je ze ked ja nastavim tu session premennu v 1.php, tak potom on príde na 1.php ale nepojde dalej, premenna sa nastaví, on si spraví súbor na form action a už je tam. to iste s tokenom, na 1.php sa token nastaví, on si ho pozrie, (takže token ešte stále platí lebo nebol použitý) a pošle opat tym form actionom...

takze v tomto je problém.


Offline

Čestný člen
Čestný člen
php data

Registrovaný: 21.02.06
Prihlásený: 08.12.14
Príspevky: 5404
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 25.12.2009 21:28

B.A.X.O. - nejak ti nerozumiem o čo ti ide, možno by bolo dobré, ak by si nám napísal presne, čo riešiš a čo sa snažíš dosiahnuť. Ochrana tokenom by mala byť v tomto prípade bezproblémová, ale keďže ti celkom nerozumiem, tak ti možno radím zle.
Skús to trochu presnejšie opísať (dať ukážku, konkrétny príklad).







_________________
Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme.
Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 25.12.2009 22:02

ok tak prakticky:

1.php
Kód:
<!DOCTYPE html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<link rel="stylesheet" href="style.css">

</head>

<title>
</title>

<body>

<?php

echo "<input type='button' onclick='aktivuj_request();' value='Start Ajax'><br>";
echo "<span id='nieco'></span>";

?>

</body>

</html>

<script type="text/javascript">

var udaj = document.getElementById("nieco");

function aktivuj_request()
{

var xhr = new XMLHttpRequest();
xhr.open('POST','2.php',true);
xhr.onreadystatechange = function()
{
    if (xhr.readyState == 4){     
      var vysledok = xhr.responseText;
      udaj.innerHTML = vysledok;
    }

}

if (xhr.overrideMimeType) xhr.setRequestHeader('Connection', 'close');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

xhr.send('a='+encodeURIComponent(udaj.innerHTML));

}

</script>


2.php
Kód:
<?php

$random_cars = array(
"Audi R8",
"Ford GT",
"Porsche Carrera GT",
"Lamborghini Gallardo",
"Ferrari Enzo"
);

$cislo = rand(0,4);

echo $random_cars[$cislo];

$subor = "subor.txt";
$fh = fopen($subor, 'w');
fwrite($fh, $_POST['a']);
fclose($fh);

?>


subor.txt (na vkladanie)
Kód:
...


no a teraz si sprav napr. shaggy.html a tam si daj toto:

Kód:
<form action="2.php" method=post>
     <input type=hidden name=a value=400>
     <input type=submit>
</form>


takže na 2.php sme si vylosovali Ford GT hmm, ale po odoslani suboru s form actionom sa asi lotéria zriekla dodať cenu, keďže je tam zrazu Audi R8.

//a lepsie uz to naozaj vysvetliť neviem. proste si pozri aky efekt robí ten html subor s form actionom, a bude ti jasné proti čomu sa chcem obrániť.


Offline

Čestný člen
Čestný člen
php data

Registrovaný: 21.02.06
Prihlásený: 08.12.14
Príspevky: 5404
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 26.12.2009 21:24

Ale ja stále nechápem kde je problém.
Príde na 1.php, ty cez AJAX voláš 2.php, pričom mu ako parameter pridáš nejaký token (ktorý si zapíšeš do databázy). Ak sa zavolá ten súbor 2.php s príslušným tokenom, zrušíš platnosť toho tokenu a potom si môže volať 2.php koľkokrát chce, nebude to fungovať.
Priznaj sa, že si ty tie tokeny ani neskúšal, však?







_________________
Neradím a nekomunikujem cez SS, ak niečo potrebujete, máte iné možnosti: Ak vám zmizla téma, alebo sa vám niečo nepáči. Ak potrebujete nahlásiť príspevok/človeka, reportujte ho. Ak máte s niečim problém, riešte to v danej téme.
Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 26.12.2009 21:49

no skusil som niečo takéto ale nepôjde to. ked dotycny pride na 1.php BEZ toho aby aktivoval tlačítko na zahajenie ajax requestu...tak sa vygeneruje token ktorý doplní do svojho form actionu, a pri aktivovani form actionom sa to prepíše a až potom sa zruší token.
ak som to napísal zle, tak ma prosím upozorni.

1.php
Kód:
<!DOCTYPE html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<link rel="stylesheet" href="style.css">

</head>

<title>
</title>

<body>

<?php

session_start();

echo "<input type='button' onclick='aktivuj_request();' value='Start Ajax'><br>";
echo "<span id='nieco'></span>";

$pole = array(
"heh",
"lol",
"pup",
"dep",
"ehk"
);

$cislo = rand(0,4);

$_SESSION['token'] = $pole[$cislo];

?>

</body>

</html>

<script type="text/javascript">

var udaj = document.getElementById("nieco");

function aktivuj_request()
{

var xhr = new XMLHttpRequest();
xhr.open('POST','2.php?pp=<?php echo $_SESSION['token']; ?>',true);
xhr.onreadystatechange = function()
{
    if (xhr.readyState == 4){     
      var vysledok = xhr.responseText;
      udaj.innerHTML = vysledok;
    }

}

if (xhr.overrideMimeType) xhr.setRequestHeader('Connection', 'close');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

xhr.send('a='+encodeURIComponent(udaj.innerHTML));

}

</script>


2.php

Kód:
<?php

session_start();

if($_GET['pp'] == $_SESSION['token']){

$random_cars = array(
"Audi R8",
"Ford GT",
"Porsche Carrera GT",
"Lamborghini Gallardo",
"Ferrari Enzo"
);

$cislo = rand(0,4);

echo $random_cars[$cislo];

$subor = "subor.txt";
$fh = fopen($subor, 'w');
fwrite($fh, $random_cars[$cislo]);
fclose($fh);

$_SESSION['token'] = null;

}

?>


Ja by som potreboval niečo ako nahrášku HTTP_refereru.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 27.12.2009 16:35

Už som ti to písal na inom fóre. Ak nechceš, aby mohol návštevník meniť údaje, tak ich nevkladaj do html kódu a nenechaj si ich posielať (a tak ich nebude môcť zmeniť).

Stále neviem, čo presne chceš dosiahnuť, takže možno budem písať o úplne niečom inom. ;)
Ak chceš napr. aby si používateľ niečo vylosoval, tak pomocou Ajax "prebehne" to losovanie takým spôsobom, že server vygeneruje výhru, niekam si ju uloží (do session alebo do DB) a pošle to ako odpoveď na tú Ajax žiadosť. Server vie, čo sa vyžrebovalo a vie to aj návštevník stránky (a nemôže to zmeniť).

Ak chceš použiteľnú radu, budeš musieť prezradiť, čo vlastne chceš dosiahnuť a potom ti pravdepodobne niekto bude vedieť poradiť. ;)

PS: O tom, ako dosiahnuť ukladanie stránky, na ktorej si bol predtým, ti už napísali dosť (a určite by to fungovalo, ak by si od toho naozaj chcel len tú náhradu http referer a nie aj kopec ďalších vecí).


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 27.06.09
Prihlásený: 16.06.15
Príspevky: 154
Témy: 19
Bydlisko: Levice, Slo...
Príspevok NapísalOffline : 27.12.2009 20:52

ešte jedna rada...

Kód:
...
var xhr = new XMLHttpRequest();
...


mysli aj na IE, v IE sa ti takto Ajax nespustí, tam je ActiveXObject namiesto XMLHttpRequest


Offline

Užívateľ
Užívateľ
php data

Registrovaný: 22.01.08
Prihlásený: 19.04.15
Príspevky: 492
Témy: 135
Bydlisko: Bratislava ...
Príspevok Napísal autor témyOffline : 28.12.2009 5:22

neXor píše:
ešte jedna rada...

Kód:
...
var xhr = new XMLHttpRequest();
...


mysli aj na IE, v IE sa ti takto Ajax nespustí, tam je ActiveXObject namiesto XMLHttpRequest


hej ale to by som dopísal neskôr, aj tak je to len pre IE5 a IE6, totiž ja mám IE7 a ajax ide normalne.


Odpovedať na tému [ Príspevkov: 15 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Addrow - PHP send data

v PHP, ASP

8

528

05.10.2011 17:39

chrono Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Editacia data mysql tabulke cez php

v PHP, ASP

6

1472

30.12.2009 17:46

noff Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. hierarchicke data v php a mysql

v PHP, ASP

4

543

14.07.2011 18:29

Broko71 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Update new data to dmi ... AMD data change

v AMD čipové sady

5

3607

26.12.2018 20:27

Shwollo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PHP programátor - PHP, MySQL, jQuery,X)Html/CSS

v Ponuka práce

0

1310

02.05.2011 12:08

magicmedia Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vytvorenie suboru php a vlozenie php scriptu

v PHP, ASP

4

1440

07.05.2010 14:02

DeiForm Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PHP nevie precitat .PHP

v PHP, ASP

8

831

18.03.2011 19:21

camo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. php ->mysql ->php Help.zoradit

v PHP, ASP

4

594

20.06.2009 12:44

KViki Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zašifrované dáta

v Antivíry a antispywary

2

529

31.10.2014 12:10

DiPo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. vymyzane data

v Pevné disky a radiče

5

418

18.12.2011 20:35

TESLA Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. spetne data

v Ovládače

2

501

17.10.2010 17:28

peter300 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. 4gb data

v Optické zariadenia

1

582

18.01.2010 19:45

prandof Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. data projector

v Monitory, televízory a projektory

3

444

04.09.2010 19:35

dodko93 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. poskodene data

v Ostatné programy

2

626

21.11.2008 13:57

patqo_he Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. tamper data

v Ostatné programy

0

464

10.09.2011 14:27

p4tooo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Stratene data

v Pevné disky a radiče

5

1292

18.06.2006 18:20

p55p Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra