[ Príspevkov: 27 ] 
AutorSpráva
Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 09.10.2014 3:04 | Bezpecnost $_POST

Na spracovanie $_POST potrebujem pouzit toto, posiem to ako pole cisel vo forme 1,2,3

Kód:
$asdf = mysqli_real_escape_string($db, $_POST['asdf']);
   if (empty($_POST['asdf'])) {
      $output = '0';
   } else {
      $output = '';
      $i = 1;
      foreach ($_POST['asdf'] as $selected) {
         if ($i != 1) $output .= ',';
         if (interval($selected, 1, 18) != true) { echo 'chyba'; return; }
         $output .= $selected;
         $i++;
      }
   }


funkcia interval() mi len overuje ci dane cislo v tom poli, cize ci 1 a 2 a 3 splna to, ze je od 1 do 18 inac vypise chybu, chcem ale aby $_POST['asdf'] bolo bezpecne osetrene za pomoci mysqli_real_escape_string, predpokladam ze musim $asdf zadeklarovat asi ako pole? aj som to skusal ale bud idem na to blbo, alebo sa to robi inac, alebo uz neviem....viete mi niekto poradit aby som pri overeni ci je $_POST['asdf'] prazdne alebo nie nespracovaval dalej $_POST['asdf'] ale uz len nejaku premennu trebars $asdf...snad som to takto neskoro v noci vysvetlil o co mi ide :-)

// Spojený príspevok Štv 09.10.14 3:39

staci ak to osetrim na zaver $output = mysqli_real_escape_string($db, $output); ??? lebo nasledne to chcem ulozit do databazy


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 09.10.2014 10:04 | Bezpecnost $_POST

Keď overíš, že to sú naozaj len čísla v danom rozsahu, tak mysqli_real_escape_string nepotrebuješ (je ale možné, že tie parametre sú reťazec, takže tam bude potrebná kontrola, či celý ten parameter je číslo a pravdepodobne aj pretypovanie na číselný typ).

PS: Keď chceš tie čísla spojiť do reťazca, kde sú prvky oddelené čiarkov, tak si to ukladaj do poľa a na konci použi funkciu implode s vhodnými parametrami.
PPS: Ak niečo vkladáš do DB, tak je bezpečnejšie použiť prepared statements ako mysqli_real_escape


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 09.10.2014 13:02 | Bezpecnost $_POST

Tak teraz si ma dostal, ja som bol doteraz v tom, ze staci na vyberanie a vkladanie osetrit data len cez mysqli_real_escape_string, aspon vsade mi to vzdy kazdy odporucal, o prepared statements som ani nepocul :) takze mozem prerobit osetrenie vsetkych 170 $_post na prepared statements? lebo kazdy budem overovat ci je to cislo...len na niektore ako trebars tento priklad $_POST['asdf'] posielam data z <select name="asdf[]" id="asdf" multiple="multiple">.... takze mi tam dojdu ako pole ak tomu spravne chapem, aspon ked si pozriem cez var_dump($_POST['asdf']) co sa tam nachadza tak to je pole a dalej to chcem do databazy ulozit oddelene cez ciarky, ale to som si prerobil na |1|2|3| pre nasledne lepsie citanie z databazy...

// Spojený príspevok Štv 09.10.14 13:36

Tamto oddelovanie som si prerobil cez implode, usetrilo to 4 riadky :)


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 09.10.2014 17:20 | Bezpecnost $_POST

Ak overíš, že sú to len čísla (a budeš s tým pracovať ako s číslami) tak je mysqli_real_escape_string zbytočné (ak do toho vytváraného reťazca nepridáš problémové znaky).

Pri prepared statement je samotná SQL požiadavka oddelená od dát, takže DB nemusí hádať, čo sú údaje a čo je SQL (ak tam pošleš niečo nesprávne ošetrené).


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 09.10.2014 17:42 | Bezpecnost $_POST

takto vyzera ta moja funkcia interval
Kód:
function interval($input, $min, $max) {
   if (is_numeric($input) != true) {
      return 0;
   }
   if ($input >= $min && $max >= $input) {
      return $input;
   } else {
      return 0;
   }
}


Kód:
         if (empty($_POST['asdf'])) { $output = '0'; } else {
            foreach ($_POST['asdf'] as $selected) {
               if (interval($selected, 1, 30) != true) {
                  echo 'chyba'; return;
               }
               $output[] = $selected;
            }
            $output = "|".implode("|,|", $output)."|";
            $asdf = mysqli_real_escape_string($db, $output);
         }
         mysqli_query($db, "UPDATE profil SET asdf = '$asdf' WHERE id = '$id'");


treba to nejak extra osetrovat?


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 09.10.2014 18:38 | Bezpecnost $_POST

V prvom rade, názov funkcie interval je zlý (pretože z neho nie je zrejmé, že tá funkcia testuje, či je číslo v povolenom rozsahu). Taktiež nikde nepoužívaš to, čo tá funkcia vráti, takže stačí keď vráti true/false a budeš napr. testovať, či vrátila presne false (interval(...) === false), alebo čokoľvek iné, ako presne true (interval(...) !== true).

Ďalej tam očakávaš celé číslo v desiatkovej sústave (v "normálnom" formáte), ale tá funkcia is_numeric vráti true aj pre iné tvary (a celá tá funkcia vyhodnotí napr. 1.25 ako dobré číslo). Otázne je, ako otestovať, či reťazec obsahuje naozaj len číslo v správnom tvare (pretypovanie pomocou int alebo intval použije len začiatok reťazca, čo môže, ale aj nemusí, vadiť).

Z rovnakého dôvodu treba ten reťazec pretypovať aj v tom cykle (pretože takto si do DB môžeš uložiť niečo ako 1E0,0x2,3.25). A keďže to pretypovanie musíš riešiť aj v tej funkcii, možno by nakoniec bolo najrozumnejšie, aby tá funkcia vrátila false pri chybe a ak je všetko OK, vráti sa, už pretypované, číslo. :)

A ak s tým budeš naozaj pracovať ako s číslami (a nie ako s reťazcami, ako teraz), tak tú funkciu mysqli_real_escape_string môžeš odstrániť.

PS: A samozrejme, ak id posielal používateľ, tak musíš otestovať a ošetriť aj id.


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 09.10.2014 20:03 | Bezpecnost $_POST

jasne vdaka za rady idem to teda prerobit :)

//este taka otazka proti csrf mi staci pouzivat toto? https://www.owasp.org/index.php/PHP_CSRF_Guard aspon som to teda vyskusal a vyzera to byt funkcne, ale tak mozno s tym mate niekto skusenost... :)


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 09.10.2014 20:26 | Bezpecnost $_POST

Stačí, ale ja by som do toho formuláru priamo vkladal potrebný skrytý element (a nefiltroval by som to tou funkciou csrfguard_replace_forms).


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 09.10.2014 20:57 | Bezpecnost $_POST

nie je to jedno?


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 09.10.2014 21:29 | Bezpecnost $_POST

Ak vytváraš ten html kód pre formulár ty pomocou php, tak je zbytočné to potom ešte raz parsovať a pridávať tam tie prvky (keď to môžeš urobiť priamo pri tom vytváraní formulára). Ak ti ale nevadí, že sa ten výstup bude spracovávať viac krát, tak to jedno je (a ak tam nepoužívaš funkcie na spracovávanie výstupu ob_start/...).


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 09.10.2014 23:23 | Bezpecnost $_POST

jasne, chapem

inac v tej mojej funkcii interval nestaci zmenit funkciu is_numeric za is_int? a nemusim s tym nic robit...?

// Spojený príspevok Štv 09.10.14 23:42

tak nestaci, musel som ten $input pretypovat na int


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
Offline

Správca fóra
Správca fóra
Bezpecnost $_POST

Registrovaný: 27.07.07
Príspevky: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
NapísalOffline : 10.10.2014 0:33 | Bezpecnost $_POST

Zbytocne to komplikujes tym cyklom aj funkciou interval, ved ti staci pouzit min/max funkcie a zistit napr. cez array_filter, ci pole obsahuje len cisla


_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 10.10.2014 0:48 | Bezpecnost $_POST

funkciu na to nejaku musim isto mat, ci nie? lebo chcem to globalne zmenit ak by som cosi robil ci menil aby som nemusel vsetkych vyse 150 vstupov menit v buducnosti, ale pozriem na to, ono verim tomu ze ak by ten moj kod videl niekto z vas, tak by ste sa zgrcali z toho ako som komplikovane spravil niektore veci :lol: ale tak chcem skusit spravit cosi vecsie sam a zatial sa mi asi aj dari co mi je az divne, len ten kod je na zaplakanie urcite o-))) asi 6000 riadkov (nepocitam sablonu) a nic nemam v podstate spravene :lol: asi tak 50% a chcem osetrit vsetky vstupy viac ako som to mal, lebo som mal pochybnosti o tom...a asi mam nejaku uchylku mat vsetko v jednom subore alebo co....


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 10.10.2014 1:00 | Bezpecnost $_POST

Pri väčšom projekte sa časom pravdepodobne dopracuješ do stavu, keď bude každý formulár a/alebo stánka vlastný objekt (zložený z ďalších objektov) a výsledný html kód sa z toho bude automaticky generovať (a automaticky sa budú kontrolovať aj dáta, ktoré prídu cez POST/GET). ;)

Každopádne rozumné je dať si nejaký rozumný cieľ a nepokúšať sa všetko urobiť hneď na prvý pokus. (a používanie nejakého VCS je nutnosťou)


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 10.10.2014 1:36 | Bezpecnost $_POST

Tak to co robim je pre mna zatial druha vec co sa snazim nakodit, je mi jasne ze nespravim hned cosi dokonale, ale tak chcem aspon nech to je trosku bezpecne, objekty su pre mna stale spanielska dedina, mozno keby som tomu pochopil ako to funguje, tak by sa mi to co robim teraz robilo asi lepsie, netusim. Ked si porovnam ale php kod svojho takeho jednoducheho cmska co mam na blogu (odkaz v peticke fora) co je moja prva taka pouzitelna vec s kodom zoznamovacieho webu (www.qlp.sk) co sa snazim spravit, tak nejaky koder by v nom videl isto zlepsenie, ale urcite tam dost veci riesim zlozitejsie a dali by sa spravit omnoho jednoduchsie :-) kontrolujem si generovany cas, pocet sql dotazov na stranke a po novom som si tam pridal aj memory_get_usage() a nechcem trebars aj cosi presvihnut ak by tam nahodou vznikla nejaka vyssia navstevnost aby to nezatazovalo moc hosting a vsimam si ze ked som to tam pridal tak memory_get_usage() mi zobrazovalo okolo 1,7MB a teraz 2,25 az 3MB a neviem ci aj to si trebars vsimat a byt v nejakom limite...


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 19.10.2014 5:13 | Bezpecnost $_POST

chrono píše:
Pri prepared statement je samotná SQL požiadavka oddelená od dát, takže DB nemusí hádať, čo sú údaje a čo je SQL (ak tam pošleš niečo nesprávne ošetrené).
tak som to prerobil cez prepared statement, nepaci sa mi na tom len to ze tolko riadkov potrebujem, predtym my stacilo mysqli_query()...


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 19.10.2014 10:54 | Bezpecnost $_POST

Stačilo ti mysqli_query + ošetrovanie vstupov :) Každopádne ak potrebuješ poslať jednu požiadavku viac krát, tak pri prepared statements si tú požiadavku pripravíš a potom už len serveru posielaš dáta, takže to je rýchlejšie.


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 20.10.2014 17:05 | Bezpecnost $_POST

Tomu nejak nerozumiem, tym myslis to ze mam pripraveny prepared statements kde budem mat ja neviem trebars 10 moznych poziadaviek a poslem tam len jednu, tak sa mi ulozi len jedna a ostatne nechaju tak?

// Spojený príspevok Pon 20.10.14 2:16

Moja druha otazka s tymto moc asi nema, ale kazdy vstup osetrujem mysqli_real_escape_string, potom ho prezeniem svojou interval funkciou s podmienkami ci je v tom rozsahu, ci sa jedna o cislo a nasledne prepared statements, lenze pri 10 vstupoch premennych a premennych, tak som si spravil funkciu safe($_POST['vstup'], nieco, nieco, nieco, nieco, nieco), v tejto funkciu robim to co som robil zvlast pri kazdom vstupe a len si menim parametre co chcem aby to splnalo, lenze ta funkcia mi vola v sebe dalsiu funkciu, ta dalsia vola podla parametrov dalsiu funciu atd, takychto volani tam mam aspon pri jednom moznom vstupe tusim 6, cize funkcia zavola inu a to 6x, moze taketo vnutorne volanie funkcii mat vplyv na rychlost zbehnutia scriptu? samozrejme vstup mam uz na zaciatku snad bezpecne osetreny...a do prepared statements nezadavam premenne, ale priamo funkciu safe($_POST, nieco, nieco....) aby som usetril riadky a zbytocne miesto, je to blbe riesenie? Hlavne ma zaujima tych xy vnorenych volani funkcii ci ako to nazvat....

// Spojený príspevok Pon 20.10.14 17:05

Kód:
function clean($db, $clean) {
   $clean = mysqli_real_escape_string($db, $clean);
   $clean = htmlspecialchars($clean, ENT_QUOTES, 'UTF-8');
   $clean = nl2br($clean);
   $clean = preg_replace("/ {2,}/", " ", trim($clean));
   $clean = str_replace(array("\r\n","\r","\n","\t","\\r","\\n","\\t","\\r\\n")," ",$clean);
   $clean = preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '', $clean);
   $clean = preg_replace("/ {2,}/", " ", trim($clean));
   return $clean;
}


Takto mi odstrani riadky, zdvojene medzery, tabulatory, ale ked chcem ulozit \t\r\n tak sa zmazu, ked zakomentujem dve predposledne, tak sa uklada ako text \t\r\n a asi aj ine znaky ale nezmaze sa mi enter napriklad, to nie je nejaka jedna normalna funkcia na take nieco? ci cosi robim blbo? o-)


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 20.10.2014 18:29 | Bezpecnost $_POST

1. Pri prepared_statements nepotrebuješ používať mysqli_real_escape_string (pretože DB pomocou bind_param povieš, aké typy dáta tam posielaš a DB sa o všetko potrebné postará automaticky).

2. pri regexp \s znamená akýkoľvek biely znak (a teda aj medzera, \n, \t)... takže stačí použiť $clean = trim(preg_replace("\s\s+", " ", $clean)); (je to aj ako ukážka na stránkach Php preg_match)

3. Je otázne, či je rozumné upravovať ten text pred ukladaním do DB, alebo až pri zobrazovaní (myslím tie funkcie htmlspecialchars a nl2br, pretože napr. Ajax+javascript môže vyžadovať niečo iné).

4. Viac volaní funkcíí znamená, že to bude pomalšie, otázne je ale, či to je problém (pretože predpokladám, že oveľa častejšie sa to bude zobrazovať, ako ukladať/meniť).


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 20.10.2014 21:41 | Bezpecnost $_POST

Zaujimave, doteraz som mal posledny post s ktorym som sa musel takto vyhrat lebo je jediny kde uzivatel zadava svoj vlastny text tak som ho spracovaval cez mysqi_query, prerobil som ho cez prepared statements a stacia mi len toto, takto sa to sprava presne tak ako som chcel, co mi je divne, myslel som ze obe spracuvavaju tie data rovnako, len su oddelene

Kód:
   $clean = str_replace(array("\r\n","\r","\n","\t","\\r","\\n","\\t","\\r\\n")," ",$clean);
   $clean = preg_replace('#(\\\r|\\\r\\\n|\\\n)#', '', $clean);
   $clean = preg_replace("/ {2,}/", " ", trim($clean));


ja zobrazujem priamo dane data, cize jeden riadok o velkosti 4000znakov, ktory sa sam zalomi a clovek si tam moze napisat nejake litanie presne tu https://www.qlp.sk/profil/jano-4.html a tam vlastnymi slovami co je na spodku....

no ja som nespozoroval spomalenie, ono vecsina funkcii sluzi na zobrazovanie casti na stranke podla toho ake premenne do nich vlozim a to ma zaujimalo ze ako sa k tomu sprava kompilator, ze ci len o tej funkcii vie a iba ked je na nu poziadavka tak sa spracuje a vyhodnoti, alebo vseky funkcie taha do pamete bez rozdielu ci je na nu dopyt alebo nie, ja som to chcel len takto nejak okaslat, aby som nezatazoval pamet zbytocnym kodom v zbytku funkcii a pod...trebars ked si otvoris ten profil, tak na spodku si meriam vygenerovany cas, pocet dotazov a velkost kolko zabera pamete a pride mi to celkom dost 2,5 az 4mb a to tam v podstate nic este nemam, len editaciu profilu, zobrazovanie profilu a vyhladavanie, ved to ked dokoncim tak sa dostanem na 7-8mb a pride mi to celkom dost vela ak zozerie tolko pamete, tymto si sa niekedy nezapodieval?


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 16.11.2014 8:58 | Bezpecnost $_POST

JanoF píše:
jasne vdaka za rady idem to teda prerobit :)

//este taka otazka proti csrf mi staci pouzivat toto? https://www.owasp.org/index.php/PHP_CSRF_Guard aspon som to teda vyskusal a vyzera to byt funkcne, ale tak mozno s tym mate niekto skusenost... :)

Dnes som zisil ze toto nie je moc dobre riesenie, sledujem akurat nabalovanie velkosti session a s tymto som sa nemal problem dostat behom 10 minut na 15MB velkost danej session, ukladam ich do suborov lebo hladam jednu chybu, tak sledujem co sa v nej uklada a toto ma celkom sokovalo, ja som cakal ze kazde vygenerovanie tokenu sa po pouziti zmaze resp ma nejaku casovu platnost a v kode sa nic o case neuvadza, aspon ja tam nic take nevidim, jedna cast tam je o zniceni tokenu so session ale mne sa nezda ze by sa po pouziti znicil a aj tak sa session nabaluje, ved to ak ma niekto limit na php dajme tomu 10mb tak dany navstevnik pri niecom takom si znefunkcni pristup na dany web...odstranil som tu ochranu a teraz mi ide ten web ako naspeedovany, tak som z toho jelen, myslim si ze by trebalo len pridat platnost session a nejaku dobu ja neviem trebars par minut a je to...

// Spojený príspevok Ned 16.11.14 4:49

Mozno ked sa niekto do toho rozumie, tak ma usmerni, ale tak vidim to v subore danej session a za 10 minut som sa dostal na velkost 15mb a ja sa mozem divit ze mi web po 10 minutach testovania a neustaleho refreshu ci niecoho ineho vykazuje 503 po case o-)

// Spojený príspevok Ned 16.11.14 5:47

Takze po pozreni sa na ten kod, tak je to podla mna totalne dementne riesenie, ak viem ze nemam na webe viac ako 100 formularov, tak je uplne na nic ak function csrfguard_replace_forms($form_data_html) bude robit toto:

Citácia:
$name="CSRFGuard_".mt_rand(0,mt_getrandmax());
$token=csrfguard_generate_token($name);


ku kazdemu formularu vytvori vzdy CSRFGuard_ od 0 do 2147483647 a k nemu token, to mi pride ako totalna blbost, preco taka vysoka hodnota? nie som ale koder, ale ked tomu chapem, tak ak stravim na webe xy casu zacnem refreshovat vsetky formulare toto spravim na xy strojoch, prehliadacoch aby som dostal maximalny pocet z 2147483647 a dostal sa k limitu max pamete pre php, tak kludne clovek dokaze zhodit dany web, bolo by to pracnejsie, ale mne to takto pride ako ochrana jednej veci a moznost zneuzitia inej veci.

za par hodin clovek dokaze sa pri vsetkych formularoch isto dostat k php memory_limit toto sucasne clovek spravi pod xy inych session a nieco to uz s danou masinou isto spravi...

Len tak z prdele som si spravil 100 formularov, dal ich do iframu a refreshoval automaticky, behom 3 minut som sa dostal na 20mb session a memory_get_usage() okolo 50mb, netusim aky ma wamp memory_limit, nechce sa mi pozerat do php.ini, ale pride mi to sialene kto to takto navrhol, ved tam bohate staci do 100 nahodnych tokenov, naco viac?



Ulozil som si 1500000 tokenov do suboru a mal 200mb, vygenerovat tolko tokenov nebude problem a tym sa dostat k maximalnemu limitu php, 200mb na memory_limit je aj tak vysoke cislo, ale dajme tomu ze dany web ma pre session takyto limit, ak takto vygenerujem 1000 session po 200mb co to spravi s masinou? :lol: :-D a kde je este daleko max 2147483647 kombinacii, ved to ak by niekto takto nahodne vygeneroval, tak dana session ak by bola nastavena na neobmedzenu velkost tak by zaberala ak nerobim chybu v pocitani cez 260gb, trosku dementne riesenie, ci?


Cize ak tam viac formularov nemam a nemoze sa stat ze by som mohol naraz upravit viac ako 100 formularov, tak nestaci taketo riesenie?

Kód:
   $name="CSRFGuard_".mt_rand(0,100);
   $token=csrfguard_generate_token($name);


tymto sa velkost jedneho session dostane na nejaku max velkost a viac sa nabalovat uz nebude....


Rozmyslam blbo pri tej myslienke, alebo mi nieco unika?

// Spojený príspevok Ned 16.11.14 6:29

Tiez funkcia function csrfguard_generate_token($unique_form_name) pouziva sha512, naco? nestaci sha256 a tym sa token skrati? aj tak je nulova sanca ze by ho pri csrf utoku niekto uhadol, snad ma niekto vyvedie z miery a mozno pochopim preco to je tak riesene ako to je, ale mne pride totalne stupidne...

// Spojený príspevok Ned 16.11.14 7:03

Toto je moje upravene riesenie, neviem ale ci moze byt: zobraziť
Kód:
function csrfstoreinsession($key, $value) {
   if (isset($_SESSION)) {
      $_SESSION[$key] = $value;
   }
}
function csrfunsetsession($key) {
   $_SESSION[$key] = ' ';
   unset($_SESSION[$key]);
}
function csrfgetfromsession($key) {
   if (isset($_SESSION[$key])) {
      return $_SESSION[$key];
   } else {
      return false;
   }
}
function csrfguardgeneratetoken($name) {
   if (function_exists("hash_algos") and in_array("sha256", hash_algos())) {
      $token=hash("sha256", mt_rand(0, mt_getrandmax()));
   } else {
      $token = ' ';
      for ($i = 0;$i < 128;++$i) {
         $r = mt_rand(0, 35);
         if ($r < 26) {
            $c = chr(ord('a') + $r);
         } else {
            $c = chr(ord('0') + $r - 26);
         }
         $token .= $c;
      }
   }
   csrfstoreinsession($name, $token);
   return $token;
}
function csrfguardvalidatetoken($name, $value) {
   $token = csrfgetfromsession($name);
   if ($token === false) {
      return false;
   } else if ($token === $value) {
      $result = true;
   } else {
      $result = false;
   }
   csrfunsetsession($name);
   return $result;
}
function csrfguardreplaceforms($data) {
   $count = preg_match_all("/<form(.*?)>(.*?)<\\/form>/is", $data, $matches, PREG_SET_ORDER);
   if (is_array($matches)) {
      foreach ($matches as $m) {
         if (strpos($m[1], "nocsrf") !== false) { continue; }
         $name = "hidden_".mt_rand(0, 99);
         $token = csrfguardgeneratetoken($name);
         $data = str_replace($m[0], "<form{$m[1]}><input type=\"hidden\" name=\"value\" value=\"{$name}\" /><input type=\"hidden\" name=\"token\" value=\"{$token}\" />{$m[2]}</form>", $data);
      }
   }
   return $data;
}
function csrfguardinject() {
   $data = ob_get_clean();
   $data = csrfguardreplaceforms($data);
   echo $data;
}
function csrfguardstart() {
   if (count($_POST)) {
      if (!isset($_POST['value']) or !isset($_POST['token'])) {
         trigger_error("No CSRFName found, probable invalid request.",E_USER_ERROR);
      }
      $name = $_POST['value'];
      $token = $_POST['token'];
      if (!csrfguardvalidatetoken($name, $token)) {
         trigger_error("Invalid CSRF token.",E_USER_ERROR);
      }
   }
   ob_start();
   register_shutdown_function("csrfguardinject");
}
csrfguardstart();


// Spojený príspevok Ned 16.11.14 8:57

Skusam uz hodinu to svoje upravene riesenie a vyzera ze funguje asi s tym rozdielom, ze po hodine sa memory_get_usage() pohybuje na urovni 3MB, predtym som nemal problem sa dostat na 20MB, skutocne demencia prveho stupna a to som cakal ze ked sa ten web zaobera bezpecnostou, tak ze je to riesenie premakane....taktiez mi aj web ide ovela rychlejsie ako predtym a neobmedzim ine relacie co sa mi predtym podarilo spravit skrz toho ze som jednu len kopil a kopil a kopil a bola plna zbytocnych tokenov ktore ani neboli pouzite...


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 16.11.2014 12:10 | Bezpecnost $_POST

To odstránenie toho tokenu zo session robí len keď sa kontroluje odoslaný formulár (takže nie je problém neustále obnovovať tú stránku a generovať viac tokenov).

Vhodné riešenie závisí od toho, či chceš, aby mohol používateľ posielať viac formulárov naraz. Jednoduché riešenie je, že také niečo nebudeš podporovať a teda vždy bude platný len jediný token. Urobiť sa to dá tak, že sa tam nepoužije to náhodné číslo (a teda sa vždy bude používať rovnaký názov), prípadne tam to náhodné číslo necháš a poznačíš si ho do session, aby si pri ďalšom generovaní mohol ten starý kľúč vymazať.

PS: Každopádne by bolo vhodné pridať tam aj časovú platnosť toho tokenu, keďže pôvodné riešenie počíta s tým, že session nebude mať neobmedzene dlhú platnosť.


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 16.11.2014 21:45 | Bezpecnost $_POST

80kb session lepsia ako 10MB ako som sa k takej dokazal behom par hodin kludne dostat, mozno niekedy tam dorobim nejake to mazanie pri refreshnuti, ale moc sa mi ani nechce, aj velkost tokenu som skratil zo sha512 na sha256, pride mi zbytocne mat az taky dlhy ten token a tiez zbytocne tam pouzivat sha* a pouzit nieco co bude rychlejsie, aj tak nema utocnik predsa sancu zneuzit csrf , ci?


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 14.01.2015 22:33 | Bezpecnost $_POST

Snazil som sa nejak ten kod vylepsit aby bol funkcny a nemusel som robit cosi vlastne co ani neviem ci by fungovalo poriadne, tak som tu hodnotu poctu tokenov zvysil na z 99 na 9999 a zmenil som hash funkciu http://php.net/manual/en/function.hash.php skusil som si ako na pocitaci tak aj na hostingu ktora je najrychlejsia, z toho mi tam vysla ako ta najrychlejsia adler32, navyse ma len 8 miest vygenerovany hash, to je ako by som mal okolo 6500 tokenov cez sha256 ak dobre pocitam, postacuje taky dlhi hash na toto ze? skusil som si refreshovat niekolko okien kde mam na stranke viac vygenerovanych tych tokenov a session som dostal po asi 15 minutach na 200kb co je tiez este asi v unosnej miere, skor ma zaujima ci staci len 8 miestny token, je to tak ci tak dost kombinacii, ci?


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 15.01.2015 11:03 | Bezpecnost $_POST

Naozaj potrebuje používateľ naraz odosielať 9999 formulárov? (to ale, okrem iného, znamená, že niektoré tokeny by mohli byť platné príliš dlho) :)

Inak štandardne tá funkcia csrfguard_generate_token používa pri hash mt_rand a tá funkcia vráti číslo v rozsahu 0 ... 2^31, takže je otázne, či je tam tá hash funkcia potrebná (pretože tá časť, ktorá sas použije v prípade nedostupnosti hash_algos generuje náhodnejší reťazec). Keďže to náhodné číslo je dosť veľké, tak na jeho uhádnutie stále treba veľa pokusov, takže až tak veľký problém to nie je.


Offline

Prevádzkovateľ fóra
Prevádzkovateľ fóra
Bezpecnost $_POST

Registrovaný: 01.05.05
Príspevky: 12424
Témy: 1447 | 1447
Bydlisko: Bratislava
Vek: 32
Napísal autor témyOffline : 15.01.2015 11:09 | Bezpecnost $_POST

ono povodne tam bol rozsah celeho intu v kladnych cislach, problem tam je ze stare tokeny sa neodstrania a stale su v session ulozene, mne ten system pride totalne zle spraveny a asi si fakt spravim cosi vlastne a budem vychadzat z toho, tu som ten problem viac rozpisal bezpecnost-post-vt169192.html#p1587009 chcem to pouzivat zatial len ako docasne riesenie, ale isto to budem musiet spravit inac...


_________________
SilverStone SST CS01 | Corsair SF600 600W SFX | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 (16 Cores / 32 Threads) & Noctua NH-U9DX i4 | Kingston HyperX Savage 32 GB DDR4 2400 MHz | PNY NVIDIA Quadro K1200 DP 4 GB DDR5 | Intel SSD 750 1.2 TB NVMe & Intel SSD 730 240 GB SATA & Seagate BackUp Plus Portable 12 TB USB | 31.5" 4K LCD EIZO FlexScan EV3237 & 2 x 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech Wireless G700s | Harman Kardon Nova | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 - Intel Core i7 5600U, 8 GB DDR3 1600 MHz, Intel HD Graphics 5500, SanDisk SSD 512 GB, 12.5 FHD LED IPS, WWAN 3G 4G LTE, Microsoft Windows 7 Ultimate | Nintendo Classic Mini | BlackBerry Passport 96 GB
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 : 15.01.2015 23:57 | Bezpecnost $_POST

Ten kód je viac-menej len ukážka, ako by to mohlo vyzerať a musí sa to prispôsobiť pre každý projekt (pretože napr. ak je na stránke jediný formulár a session sú len krátkodobé, tak ten kód bude fungovať bez problémov).

Inak ten kód napr. nijako nerieši to, ku ktorému formuláru bol ten token vygenerovaný.

// Spojený príspevok Pia 16.01.15 0:09

Mimochodom zabudol som, že ten token sa zvyčajne kombinuje s cookie (keďže externá stránka nemá prístup k tomu cookie).

// Spojený príspevok Pia 16.01.15 0:13

A ešte som zabudol že stačí, aby si vygeneroval jediný token a občas ho zmenil (napr. pri prihlásení), nepotrebuješ ich viac (ak nebudeš chcieť riešiť vlastný token pre každý formulár, ale to je zbytočne komplikované a bezpečnosť to zase až tak nezvyšuje).


 [ Príspevkov: 27 ] 


Bezpecnost $_POST



Podobné témy

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

$_POST

v PHP, ASP

11

825

13.02.2008 12:57

stenley

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

ochrana $_POST

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PHP, ASP

42

1668

07.01.2010 18:50

mylan

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

pomoc s $_POST

v PHP, ASP

17

619

10.03.2008 11:16

mondzo

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

guestbook - vyprazdnenie $_POST a ...

v PHP, ASP

2

688

19.01.2009 20:58

Ded'leg

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

Filtrovanie $_POST, viacrozmerne pole

v PHP, ASP

7

382

24.11.2008 8:14

stenley

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

$_POST['pole']['item'] kombinácia viacerých typov inputov

v PHP, ASP

20

614

30.08.2011 19:46

camo

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

chyba vo formluari - nenačíta premennu z $_POST

v PHP, ASP

6

208

25.11.2012 16:00

dafo

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

bezpecnost

v PHP, ASP

6

371

05.02.2008 16:27

p360t

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

Bezpečnosť obrázkov

v PHP, ASP

8

321

10.01.2009 21:08

shaggy

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

Bezpečnosť COOKIE

v PHP, ASP

17

800

25.10.2008 14:02

Tominator

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

Bezpečnosť Windows

v Antivíry a antispywary

7

232

17.11.2015 13:33

shiro

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

Bezpecnost routeru

v Bezpečnosť a firewally

1

472

28.11.2009 11:32

Jaro

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

akú bezpečnosť

v Bezpečnosť a firewally

18

2077

06.08.2007 13:05

Rbot

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

Bezpecnost stranky

v PHP, ASP

5

184

24.08.2013 22:04

shaggy

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

VB-bezpečnosť

v Delphi, Visual Basic

6

581

21.05.2009 11:41

Fico

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

bezpečnosť webu

v PHP, ASP

12

233

18.02.2013 15:18

PepperSK



© 2005 - 2017 PCforum, edited by JanoF