[ 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 | 135
Bydlisko: Bratislava ...
NapísalOffline : 22.12.2009 16:39 | php data

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: 1586
Témy: 96 | 96
NapísalOffline : 22.12.2009 17:12 | php data

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: 3991
Témy: 96 | 96
NapísalOffline : 22.12.2009 17:20 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 22.12.2009 17:57 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 22.12.2009 18:54 | php data

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: 5447
Témy: 29 | 29
Bydlisko: Bratislava
NapísalOffline : 22.12.2009 19:48 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 22.12.2009 20:05 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 25.12.2009 18:01 | php data

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: 5447
Témy: 29 | 29
Bydlisko: Bratislava
NapísalOffline : 25.12.2009 21:28 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 25.12.2009 22:02 | php data

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: 5447
Témy: 29 | 29
Bydlisko: Bratislava
NapísalOffline : 26.12.2009 21:24 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 26.12.2009 21:49 | php data

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: 1719
Témy: 0 | 0
NapísalOffline : 27.12.2009 16:35 | php data

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 | 19
Bydlisko: Levice, Slo...
NapísalOffline : 27.12.2009 20:52 | php data

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 | 135
Bydlisko: Bratislava ...
Napísal autor témyOffline : 28.12.2009 5:22 | php data

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.


 [ Príspevkov: 15 ] 


php data



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

292

05.10.2011 17:39

chrono

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

Editacia data mysql tabulke cez php

v PHP, ASP

6

1209

30.12.2009 17:46

noff

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

hierarchicke data v php a mysql

v PHP, ASP

4

291

14.07.2011 18:29

Broko71

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

Update new data to dmi ... AMD data change

v AMD čipové sady

4

515

11.04.2010 8:52

petos

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

812

02.05.2011 12:08

magicmedia

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

Vytvorenie suboru php a vlozenie php scriptu

v PHP, ASP

4

924

07.05.2010 14:02

DeiForm

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

PHP nevie precitat .PHP

v PHP, ASP

8

463

18.03.2011 19:21

camo

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

php ->mysql ->php Help.zoradit

v PHP, ASP

4

322

20.06.2009 12:44

KViki

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

Zašifrované dáta

v Antivíry a antispywary

2

227

31.10.2014 12:10

DiPo

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

vymyzane data

v Pevné disky a radiče

5

214

18.12.2011 20:35

TESLA

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

poskodene data

v Ostatné programy

2

415

21.11.2008 13:57

patqo_he

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

Stratene data

v Pevné disky a radiče

5

1012

18.06.2006 18:20

p55p

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

tamper data

v Ostatné programy

0

220

10.09.2011 14:27

p4tooo

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

G DATA

v Antivíry a antispywary

13

726

30.07.2011 18:09

cezet

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

spetne data

v Ovládače

2

250

17.10.2010 17:28

peter300

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

4gb data

v Optické zariadenia

1

340

18.01.2010 19:45

prandof



© 2005 - 2017 PCforum, edited by JanoF