| | |
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Autor | Správa |
---|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... |
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?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 |
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! |
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 |
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š ...
|
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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.
|
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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,.
|
|
Registrovaný: 21.02.06 Prihlásený: 08.12.14 Príspevky: 5404 Témy: 30 Bydlisko: Bratislava | Napísal shaggy: 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. |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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.
|
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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.
|
|
Registrovaný: 21.02.06 Prihlásený: 08.12.14 Príspevky: 5404 Témy: 30 Bydlisko: Bratislava | Napísal shaggy: 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. |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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ť.
|
|
Registrovaný: 21.02.06 Prihlásený: 08.12.14 Príspevky: 5404 Témy: 30 Bydlisko: Bratislava | Napísal shaggy: 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. |
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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.
|
|
Registrovaný: 13.11.07 Prihlásený: 20.08.16 Príspevky: 1702 Témy: 0 | Napísal chrono: 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í).
|
|
Registrovaný: 27.06.09 Prihlásený: 16.06.15 Príspevky: 154 Témy: 19 Bydlisko: Levice, Slo... | Napísal neXor: 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
|
|
Registrovaný: 22.01.08 Prihlásený: 19.04.15 Príspevky: 492 Témy: 135 Bydlisko: Bratislava ... | Napísal autor témy B.A.X.O: 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.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 15 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| Addrow - PHP send data v PHP, ASP | 8 | 528 | 05.10.2011 17:39 chrono | | Editacia data mysql tabulke cez php v PHP, ASP | 6 | 1472 | 30.12.2009 17:46 noff | | hierarchicke data v php a mysql v PHP, ASP | 4 | 543 | 14.07.2011 18:29 Broko71 | | Update new data to dmi ... AMD data change v AMD čipové sady | 5 | 3607 | 26.12.2018 20:27 Shwollo | | PHP programátor - PHP, MySQL, jQuery,X)Html/CSS v Ponuka práce | 0 | 1310 | 02.05.2011 12:08 magicmedia | | Vytvorenie suboru php a vlozenie php scriptu v PHP, ASP | 4 | 1440 | 07.05.2010 14:02 DeiForm | | PHP nevie precitat .PHP v PHP, ASP | 8 | 831 | 18.03.2011 19:21 camo | | php ->mysql ->php Help.zoradit v PHP, ASP | 4 | 594 | 20.06.2009 12:44 KViki | | Zašifrované dáta v Antivíry a antispywary | 2 | 529 | 31.10.2014 12:10 DiPo | | vymyzane data v Pevné disky a radiče | 5 | 418 | 18.12.2011 20:35 TESLA | | spetne data v Ovládače | 2 | 501 | 17.10.2010 17:28 peter300 | | 4gb data v Optické zariadenia | 1 | 582 | 18.01.2010 19:45 prandof | | data projector v Monitory, televízory a projektory | 3 | 444 | 04.09.2010 19:35 dodko93 | | poskodene data v Ostatné programy | 2 | 626 | 21.11.2008 13:57 patqo_he | | tamper data v Ostatné programy | 0 | 464 | 10.09.2011 14:27 p4tooo | | Stratene data v Pevné disky a radiče | 5 | 1292 | 18.06.2006 18:20 p55p |
| 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
|
|