« 1 2
Autor Zpráva
Darker
Profil
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 *
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
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 *
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
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 *
[#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
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
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 *
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
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
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 *
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
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 *
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
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
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 *
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 *
var formId=<?php echo $_SESSION['form_id'] ?>;
tak bohužel toto mi nefunguje zkoušel jsem to i s uvozovkami ale to ne to mi pošle celý skript.. ale toto opravdu nefunguje..


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
Ž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);
V js pak:
function ajaxCallback(output) {
  output=eval("("+output+")");
  window.formId=output.id;
  alert(output.zprava);
}
Pokud proměnnou formId nepřidáváš do odesílaného požadavku a divíš se, tak se mě asi snažíš naštvat.

ale to ne to mi pošle celý skript
Cože?!
john
Profil *
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
Pokud používáš jquery pak:
$.post("skript.php",{msg:"zprava", id: window.formId},ajaxCallback)
Abys pochopil zpracov8n9 v7stupu, zkus si nejd59v v7stup zobrazit.
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
window.xxx používám aby bylo ve skriptu jasné, že se jedná o globální proměnnou.
john
Profil *
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
Neprovádíš eval. Output v tvé funkci sucess je string, musíš ho na objekt převést spuštěním...
john
Profil *
a co je to to eval..?

vzdyt ta funkce mi vraci hlasku v pohode..
« 1 2

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

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

0