Autor | Zpráva | ||
---|---|---|---|
Darker Profil |
#1 · Zasláno: 16. 12. 2011, 14:49:23
john:
„takže to znamená že každá aplikace která používá ajaxové požadavky se dá takto snadno napadnout.??“ Ne. Každá co nemá antispam. Prostě si tam dej captchu. Po odeslání požadavku ji buď aktualizuj, nebo formulář skryj. Jestli mu tohle už někdo poradil onmlouvám se, slovo captcha na stránce firefox nenašel. Další možnost je dávat formuláři ID přes session ale to se sá velice snadno obejít. |
||
john Profil * |
#2 · Zasláno: 16. 12. 2011, 14:53:54
jistě děkuji po prvním přečtení nechápu tak do podrobna váš nápad ale budu ho číst pořád dokola a přijdu na to :) děkuji
|
||
Medvídek Profil |
#3 · Zasláno: 16. 12. 2011, 14:57:33
Darker:
Pokud sem to pochopil, tak se jedná o něco jako chat, navíc captchu uplně nesnášim, to už radějí řešení jako je tady :) |
||
john Profil * |
#4 · Zasláno: 16. 12. 2011, 15:03:19 · Upravil/a: john
no i tak.. když už použiju ověření jakékoliv hodnoty v SESSION mohu si udělat jenoduchý txt soubor kde bude pár řádku toho co chci zaregistrovat do sessionu pustim si to v prohlizeci a muzu vesele vse obejit....
ted mě napadlo ukládat si do session i hashovane heslo a kontrolovat pir zapisu do db jestli sedi z vysledkem z databaze k urcitemu id ;-) omlouvam se |
||
Medvídek Profil |
#5 · Zasláno: 16. 12. 2011, 15:07:09
john:
„mohu si udělat jenoduchý txt soubor kde bude pár řádku toho co chci zaregistrovat do sessionu pustim si to v prohlizeci a muzu vesele vse obejit“ Promiň, ale tohle už nepobírám :) |
||
john Profil * |
#6 · Zasláno: 16. 12. 2011, 15:08:37
[#5] Medvídek
blbý dotaz omlouvám se.. šlo o to že session v prohlížeči mohu vytvořit i sám z jiné aplikace kterou bych vytvořil já ;-) ale to už je jedno :) to už bych nějak vyřešil ;-) |
||
Medvídek Profil |
#7 · Zasláno: 16. 12. 2011, 15:17:15 · Upravil/a: Medvídek
john:
session se váže vždy k doméně, takže jen tak lehce ho nepodvrhnete. Můžete pro váš klid ještě volat session_regenerate_id(); |
||
Ugo Profil |
#8 · Zasláno: 16. 12. 2011, 15:21:18
john:
to s tou session nechápu, asi nechápeš jak session fungují. Session je uložená na serveru a má sve ID, jedine jak lze ukrast session je a. spatny nasteaveni serveru kde se necha dostat do slozky se soubory session - jsou to soubory se serializovanym stringem b. ukrast cookie ID, prepsat ho v prohlizeci a tak se na onu session pripojit, toto je problém XSS a především samotných uživatelů, s tím tedy moc neuděláš, lze session hlídat ještě jedním vlastním hashem a pohlídat si IP a nastavení jejího vlastníka vytvorit z lokalu její obsah možné není |
||
john Profil * |
#9 · Zasláno: 16. 12. 2011, 15:28:08
ajo omlouvám se zkoušel jsem to na localhostu a tam jsem zkousel akorat z jinych slozek zapnout session... nedoslo mi to ;-)
každopádně asi pro mne bude lepší hlídat v session i hash hesla uzivatele a pri kazde akci radeji zkontrolovat heslo ktere mi vypise db k danemu id uzivatele ;-) |
||
YoSarin Profil |
#10 · Zasláno: 16. 12. 2011, 15:42:54
john:
„každopádně asi pro mne bude lepší hlídat v session i hash hesla uzivatele a pri kazde akci radeji zkontrolovat heslo ktere mi vypise db k danemu id uzivatele ;-)“ Proč hash hesla? Bohatě stačí kontrolovat ID přihlášeného uživatele (většinou jediná věc kterou je potřeba držet v session). Resp kontrolovat - podívat se, jestli v session vůbec je uložené - pokud ano, všechno je OKej (krádež session viz jak popisuje Ugo). To co navrhuješ s hashem hesla je zbytečné - do session si uložíš ID uživatele a hash hesla (obojí z databáze) a při odeslání dat načteš hash hesla z db podle ID které máš v session. Jediný okamžik, kdy hashe hesla nebudou sedět je ten, kdy uživatel mezi uložením hashe do session a jeho ověřením při poslání ajax requestu vleze na nastavení svého účtu a heslo si změní. |
||
Darker Profil |
#11 · Zasláno: 16. 12. 2011, 16:01:20 · Upravil/a: Darker
john:
„SESSION mohu si udělat jenoduchý txt soubor kde bude pár řádku toho co chci zaregistrovat do sessionu“ Zdá se že seš kapku větší hacker než se zdáš :D Být tebou, pokud jde o chat, udělej: a) Kontrolu na čas (1-30s) b) Unikátní ID formuláře regenorované návratovou hodnotou požadavku na odeslání zprávy. c) Kontrolu existence loginu, jako ti popsal YoSarin. d) (nepovinné) Po určitém množství zaslaných zpráv v určitém čase začít zobrazovat kontrolní kód. (průměr zpráv na čas zjistíš jednoduchým selectem a jeho zpracováním) Z těchto čtyř bodů jsou první tři podle mně naprosto nezbytné (možná b) bych prominul). okud si s nimi nevíš rady, poradíme ti. A troufnu si poukázat na to, že s normálním, neajaxovým formulářem by to bylo úplně stejné. |
||
john Profil * |
#12 · Zasláno: 16. 12. 2011, 16:55:43
Děkuju :) to stím id formuláře taky nezní špatně.. myslíš jako že bych mu dával id nějaké náhodné číslo.? nebo jak to přesně myslíš..?
|
||
Darker Profil |
#13 · Zasláno: 16. 12. 2011, 22:27:11
přesně tak. Toto číslo bys uložil do session. Pokud je pravděpodobné, že uživatel (i nevědomky) vyvolá více formulářů najednou je nanejvýš vhodné ID ukládat jako pole. Totéž platí pro captchu. A nezapomeň ta id pak mazat. I tohle platí také pro captchu.
|
||
john Profil * |
#14 · Zasláno: 16. 12. 2011, 23:15:38
captcha.. vůbec nemám tušení o co jde.. a jak psal medvídek že ji nepodporuje tak nevim jestli je to nějaká dobrá věc ale i tak když dám teda formuláři náhodné id např v php uložim do session
$_SESSION['form_id']=rand(1,10); například. tak potom ve zdrojovym kodu bude <form id="to_Cislo" ....> a hlavně potom při odesílání ajaxu mu neřeknu ať sebere data z formuláře které má id 'to_Cislo' protože do js nemůžu dát php.. nebo jo.?? možná by fungovalo např. var formId=<?php echo $_SESSION['form_id'] ?>; nevím, plácám nesmysli nechápu přesnou myšlenku toho náhodného id v sessionu... co s tím id potom budu dělat..? včem ho budu ověřovat.? |
||
Suta Profil |
#15 · Zasláno: 17. 12. 2011, 00:29:53 · Upravil/a: Suta
john:
Nemyslím si, že je vhodné dotazovat se na diskuzi neustále na vysvětlení všech dobrých rad a náznaků, které jsi už od uživatelů dostal. Nejsem neochotný ti také pomoci a poradit, ale neudělám to z toho důvodu, že se - promiň - ptáš na vše jako malé dítě. Taky jsem jednou začínal, nikdy jsem ale zbytečně nezneužíval času ostatních. Vzhledem k tomu, co vše ti bylo poraděno, přece můžeš už sám studovat na internetu (co je to captcha, způsoby zabezpečení) a vytvořit tak funkční řešení. I kdyby tě to mělo stát hodiny času. Teprve poté se bez obav opět ptej. Alespoň já mám takovou zásadu. Neber to jen jako kritiku, spíš jako povzbuzení. |
||
Darker Profil |
#16 · Zasláno: 17. 12. 2011, 09:37:52 · Upravil/a: Darker
john:
Jsem takový dobrák, že jsem vylezl z postale a zapnul počítač. (z mobilu se blbě posílají html kódy). „<form id="to_Cislo" ....>“ Parametr ID html elementu s odesíláním formuláře nemá co dělat, používá se na manipulaci javascriptem a při tvorbě CSS selektorů. Vzhledem k tomu, že formulář odesíláš ajaxem, připadá v úvahu „var formId=<?php echo $_SESSION['form_id'] ?>;“ jelikož můžeš obsah proměnné zahrnout do odesílaných dat. Obecně jde o to: - vygeneruješ ID - Uožíš do session abys ho mohl později kontrolovat - Vypíšeš ho do formuláře jako hodnotu skrytého inputu, nebo do skriptu jako proměnnou - Po odeslání zkotroluješ zda ID co odeslal uživatel je stejné jako to v session a nezávisle na výsledku ID znovu vygeneruješ. Tohle co jsem tu popsal se už pomocí google dá dát do hromady. Skrytý input najdeš jako input hidden. |
||
john Profil * |
#17 · Zasláno: 17. 12. 2011, 14:39:45
jj skrytý input znám.. :) děkuju já jsem to nejdřív pochopil akorát jsem myslel že tu hodnotu budu muset dát jako form id ;-) tak díky moc vám všem :)
|
||
john Profil * |
#18 · Zasláno: 17. 12. 2011, 17:32:43 · Upravil/a: john
var formId=<?php echo $_SESSION['form_id'] ?>; a hlavně pokud já odešlu zprávu tak v php skriptu změním hodnotu session zase na nějaké náhodné číslo ale stránku musím aktualizovat aby se do inputu vložila aktuální hodnota session.. |
||
Darker Profil |
#19 · Zasláno: 17. 12. 2011, 18:03:21 · Upravil/a: Darker
Živou ukázku.
john: „ale stránku musím aktualizovat“ Co třeba udělat toto: /*uložení zprávy...*/ $_SESSION['form_id'] =rand(1000,9999); $output=jsou_encode(array("id"=>$_SESSION['form_id'] , zprava=>"Zprava odeslana")); die($output); function ajaxCallback(output) { output=eval("("+output+")"); window.formId=output.id; alert(output.zprava); } „ale to ne to mi pošle celý skript“ Cože?! |
||
john Profil * |
#20 · Zasláno: 18. 12. 2011, 16:17:26 · Upravil/a: john
děkuji zas takhle daleko v programování nejsem ale posnažím se skript vyzkoušet a nějak přijít na to co vlastně dělá. Díky
co jsem pochopil. function ajaxCallback(output) toto je v jquery v ajaxu jako success: function(output)
json chápu akorát nevím proč v tom poli je id v uvozovkách a zprava ne.. a po té nechápu tyto dva řádky... output=eval("("+output+")"); window.formId=output.id; používám jquery.. |
||
Darker Profil |
#21 · Zasláno: 18. 12. 2011, 19:42:57
Pokud používáš jquery pak:
$.post("skript.php",{msg:"zprava", id: window.formId},ajaxCallback) |
||
john Profil * |
jenom se chci zeptat...
window.formId nese hodnotu té proměné.? UKÁZKA: // HTML KÓD <form id="form" action="#" method="post"> <label>Jméno:<span class="forminfo">Napište jméno příjemce</span></label> <input type="text" id="jmeno" name="jmeno"> <input id="antispam" type="hidden" value="'$_SESSION['antispam']['antispam']'"> <label>Zpráva:<span class="forminfo">Napište obsah zprávy</span></label> <textarea rows="5" id="zprava" name="zprava"></textarea> <button id="postMessage">Odeslat</button> // JS KÓD $("button#postMessage").click(function(){ var komu=$("input#jmeno").val(); var co=$("textarea#zprava").val(); var antispam=$("input#antispam").val(); if(komu!="" && co!="" && antispam!=""){ $.ajax({ url: "inc/postMessage.php", type: "POST", dataType: "JSON", data: {komu: komu, co: co, antispam: window.form_id}, error: function(){alert("Někde se stala chyba");}, success: function(output){ $("input#jmeno").val(""); $("textarea#zprava").val(""); alert(output.hlaska); window.form_id=output.form_id; } }); } return false; }); // PHP KÓD if($komu!="" and $co!=""){ if($antispam==$_SESSION['antispam']['form_id']){ if($_SESSION['user_id']!=""){ INSERT TO DB $_SESSION['antispam']['form_id']=rand(1,100); $output=json_encode(array("form_id"=>$_SESSION['antispam']['form_id'],"hlaska"=>"Odesláno")); die($output); } else echo '{"hlaska":"Pokusil jste se o SPAM, musíte být přihlášen"}'; } else echo '{"hlaska":"Pokusil jste se o SPAM, nejspíše dostanete BAN"}'; } Moderátor Chamurappi: Nezačínej nejavascriptové kódy javascriptovým komentářem, mateš zvýrazňovač syntaxe.
|
||
Darker Profil |
#23 · Zasláno: 18. 12. 2011, 21:10:08
window.xxx používám aby bylo ve skriptu jasné, že se jedná o globální proměnnou.
|
||
john Profil * |
#24 · Zasláno: 18. 12. 2011, 21:29:45
jj ten script to i tak chápe..
ale když posílám první zprávu tak window.form_id se nerovná ničemu tudíž se neprovede naplnění proměnné.. |
||
Darker Profil |
#25 · Zasláno: 19. 12. 2011, 10:42:51
Neprovádíš eval. Output v tvé funkci sucess je string, musíš ho na objekt převést spuštěním...
|
||
john Profil * |
#26 · Zasláno: 19. 12. 2011, 11:10:15
a co je to to eval..?
vzdyt ta funkce mi vraci hlasku v pohode.. |
||
Časová prodleva: 12 let
|
0