Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 15 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok NapísalOffline : 25.02.2009 8:51

Nazdarek. Viem, ze co sa tyka spam ochrany tak sa tu uz cosi popisalo, no nedavno som nasiel na nete jedno uplne jednoduche riesenie a tak by ma zaujimal vas nazor. Chlapik co to prezentuje, tvrdi ze to ma zatial na 100% funkcne.. Tu je skript tej spam ochrany.
Kód:
<div style="visibility:hidden;">
<input type="text" name="mail" value="" />
</div>
<input class="button" type="submit" value="Odeslat" name="posliDotaz" />
<?php
if(isset($_POST["posliDotaz"])&&$_POST['mail']==""){
echo 'Vyplneno v poradku';
}
else{
echo 'Vyplnil jsi neviditelne pole jsi bot';
}
?>


Nebudem to rozpisovat, je to hadam kazdemu uplne jasne. Zaujima ma Vas nazor. Ci by to v praxi mohlo naozaj dobre fungovat.

A mam este jednu otazku.
Totiz ako dostatocne zabezpecit vstupy napr. na nejakom chate, alebo pridavani komentarov, posielani posty a pod. Staci pouzit addslashes a htmlspecialchars? Lebo akokolvek nad tym premyslam, tak ma nic ine nenapda. Nemozem uzivatelova povolit pri pisani chatu, posty a pod. len nejake znaky... Mozte mi poradit? Ako to osetrujete vy...? Dakujem za kazdu odpoved.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 25.02.2009 8:58

Ako riešenie je to veľmi zaujímavé, neviem či funkčné ale za povšimnutie stojí (možno ho využijem). Na otázku ako ošetrovať znaky, odpovedám, že sú prakticky dve možnosti - blacklisting a whitelisting.

Pri blacklistingu určíš čo všetko tam určite nesmie byť. Nato využívam funkciu htmlspecialchars (v súčastnosti upravenú funkciu safety).

Whitelisting je systém, kde určuješ iba čo tam môže byť, a to robím cez regulárny výraz.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 25.02.2009 10:18

No ta spam ochrana by mohla podla mna celkom dobre fungovat. Pochybujem totiz ze boty su nastavene na skumanie div tagov, resp. vlastnosti divu. Ale neviem..nemam s tym totiz zatial este ziadnu skusenost.

Tominator...Mohol by si mi trocha konkretnejsie vysvetlit ten blacklisting a whitelisting?? Nejako mi to totiz nic nehovori, akurat to ze jedno je na zakazane prvky a druhe na povolene.. :( Ak by si mi to mohol trocha vysvetlit (najlepsie na nejakom priklade: napr. ako to ma vyzerat, ako to zapisat do mojho scriptu a pod.), bol by som ti vdacny. ;) Popripade hodit nejaky link, kde by som nasiel nejake vysvetlenie..DIK


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 25.02.2009 10:50

1, to neviem to by bolo lepšie, keby sa vyjadril niekto kto botom rozumie :)
2,

Problém
Problémom je, že máš podsystém, či to je databáza, HTML výstup, XML ... Tento podsystém funguje s nejakými znakmi a preto pokiaľ mu útočník dá "podsystémové kľúčové znaky" (tak som to teraz vymyslel :)), tak môže dôjsť ku neželanému efektu. Tieto znaky môžme nazvať nebezpečné alebo škodlivé. Využíva sa to nepr. pri SQL injdection či XSS

Príklad SQL injection:

Kód:
<?php
include "config.php";
$DB = mysql_query('SELECT * FROM clanok WHERE ID="'. $_POST["ID"] .'"');
...
?>


Ja ti pošlem: asd"; DROP TABLE clanok --

Vymaže ti to tabuľku clanok (teda ak som sa nikde nepomýlil :D).

//"mysql_query() sends a unique query (multiple queries are not supported) to the currently active database..." (stenley)

Príklad XSS:
Kód:
<?php
include "config.php";
$DB = mysql_query("INSERT INTO clanok VALUES(NULL, '". $_POST["obsah"] ."')");
?>


Ja ti pošlem: nejaky clanok <script>document.location="http://www.google.sk";</script>

Po zobrazení článku uživateľa presmeruje na google. (Tiež ak som to správne napísal :), ale píšem to narýchlo, nechce sa mi to overovať)

--------------
Riešenie:
Riešenia sú dve: Blacklisting a whitelisting.

Blacklisting využíva, to že poznáme nebezpečné znaky. Pokiaľ ich vieme tak môžme urobiť dve veci: Zisťovať ich prítomnosť, a pokiaľ tam sú vrátime uživateľovi formulár, že tieto znaky nie sú tolerované. Používanejšie je prejsť to funkciami, ktoré ich nahradia za entity, teda znaky, ktoré už na podsystém nemajú vplyv.

Nato sa využíva funkcia htmlspecialchars. Na fóre v často používaných scriptoch je funkcia safety od stenleyho, ktorá je celkom užitočná v tom, že ti to prejde aj cez pole a nahradí každú hodnotu v poli, za jej bezpečnú hodnotu. Ja som funkciu safety ešte rozšíril a ošetrujem znaky ako %,' a iné.

Whitelisting sa využíva, keď vieme aké znaky môže vstup obsahovať. Pri whitelistigu sa využíva funkcia ereg (a iné, ktoré pracujú s regulárnymi výrazmi). Cez regulárny výraz sa zisťuje, či každý znak zodpovedá predpísaným znakom.

Ako taký regulárny výraz vyzerá?
^([a-zA-Z])$ - povolí len písmená (veľké a malé, bez diakritiky)
^([0-9]{8})$ - povolé len osemiestne číslo (moja predstava o ideálnom mesačnom plate :))


Kedy použiť WH a kedy BH??
WH je idálny napr. na registračné formuláre, kde máš inputy. Kde uživateľ vypĺňa polia ako vek, meno, priezvisko, mesto ...

BH je ideálny v článkoch, kde nevieme čo všetko uživateľ môže použiť (nechceme ho príliš obmedzovať) ale vieme čo by sme nechceli aby sa nám dostalo do podsystému.

Všeobecné pravidlo platí, že je dobré uprednostňovať WH pred BH.

//Ešte by som dodal, že dobrá knižka na bezpečnosť je: Zraniteľný kód. Odporúčam prečítať. Viac v téme Knihy, knihy, knihy ...


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 25.02.2009 11:28

Ta ak som to spravne pochopil, tak Whitelisting a Blacklisting je vlastne len funkcia/kod v mojom skripte, ktory mi osetri vstupne data?? Pozeral som aj ten stenlyho prispevok v teme Často použivane skripty. Ale ak to spravne chapem, tak je to v podstate to, ze si premennu zo vstupu osetrim cez pole a entity.

Cize mohlo by to vyzerat aj takto?:
Kód:
$data =htmlspecialchars(addslashes($_POST["data"]));
$vlozene = array("=", "%", ")", "(");
  if (in_array("$data", $vlozene))
  {
  $nahradit = array("", "and", ">", "<"");
  $novytext = str_replace($vlozene, $nahradit, $data);
  $novedata = "$novytext";
  }
    else
   {
   $novedata = "";
   }

Alebo nieco v tomto duchu?? A este jedna vec. Co vlaste zakazat ( ake znaky) uzivatelom napr. pri chate, ak si tak radi kreslia smajlikov, alebo * si vykresluju rôzne tvary? Spominas, ze si nahradzas napr.%. Cim ho nahradzas? Ved napriklad ked uzivatel napise niekomu vetu typu: Včera mi to vyšlo na 100%. Tak ak mu nahradim napr. tie %, tak sa mu uz potom objavi nieco ine..ina veta.. Alebo je to cele inac??


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 25.02.2009 11:41

ja napr. využívam prerobenú funkciu safety, v znení:
Kód:
function MakeMeSave(&$input) {
   if(is_array($input)) {
      array_walk_recursive($input,"SaveValue");
   } else {
      SaveValue($input);
   }
   
}

function SaveValue(&$value) {
   if(get_magic_quotes_gpc()) {
      $value = stripslashes($value);
   }

   $value = htmlspecialchars($value);
   $value = str_replace("'","'",$value);
   $value = str_replace("\\","\\\\",$value);
   $value = str_replace("%","%",$value);
   $value = trim($value);
}

A potom bezpečnosť môžeš riešiť aj globálne typom:

Kód:
<?php

MakeMeSave($_POST);
MakeMeSave($_GET);
MakeMeSave($_COOKIE);
MakeMeSave($_SESSION);

?>



A už máš všetky hlavné vstupy v podstate ošetrené cez BL. (Predtým som dával z neznámeho dôvodu BH :)). Potom ti už len treba cez WL ošetrovať hodnoty zo $_SERVER, keďže cez BL to nejde ... (ošetruj ich aba ak ich potrebuješ, napr. sa pýtaš na jazyk, alebo stránku odkiaľ prichádza a pod., inak sa ti môže stať, že ti stránka nepôjde)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 25.02.2009 16:01

Tominator... Neviem ci to dobre chapem, ale ak pouzijem ten tvoj script co si napisal, tak uz nemusim potom osetrovat vstupy?? Cize uz rovno to zapisem:
Kód:
$meno =$_SESSION['uzivatel'];

a nemusim to uz osetrovat pomocou htmlspecialchars a addslashes?
A mohol by si mi prosim ta vysvetlit tento zapis??:
Kód:
   $value = str_replace("'","'",$value);
   $value = str_replace("\\","\\\\",$value);
   $value = str_replace("%","%",$value);

Preco tam mas 2x po sebe ten isty znak??


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 25.02.2009 18:35

1, Nie už to nemusíš riešiť
2, Sekol som sa, opravené:
Kód:
   $value = str_replace("'","'",$value);
   $value = str_replace("\\","\\\\",$value);
   $value = str_replace("%","%",$value);


//hmm, nevidim tam rozdiel :) (stenley)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.09.08
Prihlásený: 14.11.17
Príspevky: 225
Témy: 74
Bydlisko: Michalovce
Príspevok Napísal autor témyOffline : 26.02.2009 18:47

Tominator..Nevidim vobec ziadny rozdiel medzi tou prvou verziou a tym "opravenym"... :( Podla toho co pises
Kód:
$value = str_replace("%","%",$value);

tak tomu rozumiem tak, ze % nahradza %, ale to mi nedava nejako zmysel..Mohol by si mi to prosim ta vysvetlit?? :-)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.02.07
Prihlásený: 21.02.10
Príspevky: 3984
Témy: 96
Príspevok NapísalOffline : 26.02.2009 18:54

:) prosim stenleyho aby mi vymazal posledný post :) ide o to že prehliadač ti to automaticky prepíše .. preto nevidíš rozdiel :D (fakt blbé ...)

takže
' za & #39;
% za & #37;
(bez medzery, lebo keby som dal ja bez medzery tak spraví to čo hore)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.09.07
Prihlásený: 30.11.11
Príspevky: 143
Témy: 37
Príspevok NapísalOffline : 08.01.2011 20:52

Práve brouzdám netom a hladam volajake fajn osetrenie vstupu a toto Tominatorove riesenie, ze mi prejde vsetky prenasane hodnoty kontrolou na zaciatku skriptu sa mi zda velmi fajn. Len tym zamenam % a apostrofov tiez velmi nerozumiem. Ak sa mi prepise % za %, percento sa mi do tabulky zapise tak ako je- a rovnako sa mi z nej aj cita, tak som si ten vstup asi pred % velmi neosetril. Ci mi nieco unika? Alebo som to zle pouzil? Vidim, ze autor mi uz asi velmi neodpovie, ale vedel by sa k tomu niekto vyjadrit? Pripadne mi odporucil nejake podobne jednoduche a elegantne riesenie na osetrenie vstupu?

Vopred vdaka.


Offline

Čestný člen
Čestný člen
spam ochrana, sql ochrana

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 08.01.2011 21:01

To je featura/bug systemu, na ktorom bezi toto forum - prevadza nam ciselne entity na klasicke znaky. Pointa je, aby si napriklad ' previedol na &#39;, % na &#37; a tak.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.09.07
Prihlásený: 30.11.11
Príspevky: 143
Témy: 37
Príspevok NapísalOffline : 08.01.2011 21:20

JJ, ale kde sa to vlastne prevadza? Ved po tomto prevode by mi do tabulky malo vpisat namiesto % - &#37. Ci nie?


Offline

Čestný člen
Čestný člen
spam ochrana, sql ochrana

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34
Bydlisko: Brno
Príspevok NapísalOffline : 08.01.2011 21:27

Ono sa to prevedie a do tabulky sa aj zapise dana entita. Len ty ked potom opat vyberas tie data a vypisujes ich, tvoj prehliadac ti ich prevedie na bezne znaky. Ale skus si data z DB vypisovat napr. do text/plain suboru, uvidis, ze su tam entity.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 30.09.07
Prihlásený: 30.11.11
Príspevky: 143
Témy: 37
Príspevok NapísalOffline : 08.01.2011 23:56

Ok. A tym padom mam taku zakladnu bezpecnost zaistenu? SQL injdection či XSS? Na co si popripade este posvieti?


Odpovedať na tému [ Príspevkov: 15 ] 


Podobné témy

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

v PHP, ASP

11

556

13.02.2014 12:03

GoodWill Zobrazenie posledných príspevkov

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

v PHP, ASP

3

604

16.05.2010 15:29

ac.milan Zobrazenie posledných príspevkov

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

v PHP, ASP

16

1550

14.06.2008 17:08

lostwarrior Zobrazenie posledných príspevkov

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

v PHP, ASP

28

1497

12.12.2008 0:49

rooobertek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aka ochrana zariadenia (bleskoistka, prep. ochrana)

v Siete

2

480

06.10.2012 18:38

peto007 Zobrazenie posledných príspevkov

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

v Antivíry a antispywary

6

1147

23.04.2008 22:56

strongy Zobrazenie posledných príspevkov

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

v Elektronika

3

834

31.01.2008 16:53

bugi512 Zobrazenie posledných príspevkov

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

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

v Antivíry a antispywary

73

3676

05.06.2008 15:51

Qpkqkma Zobrazenie posledných príspevkov

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

v Antivíry a antispywary

2

778

20.12.2007 12:42

shiro Zobrazenie posledných príspevkov

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

v Antivíry a antispywary

8

1082

24.01.2008 14:20

mimkork Zobrazenie posledných príspevkov

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

v Ostatné zariadenia

0

249

18.12.2012 15:57

9deshmode9 Zobrazenie posledných príspevkov

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

v Ostatné programy

5

319

05.04.2014 13:32

tatko Tom Zobrazenie posledných príspevkov

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

v Ostatné programy

11

918

27.10.2008 22:11

dedko45 Zobrazenie posledných príspevkov

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

v Zdravie, medicína, choroby a liečenie

4

837

18.09.2011 14:50

exoomer Zobrazenie posledných príspevkov

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

v Ostatné

8

741

05.10.2008 11:05

kaidžas Zobrazenie posledných príspevkov

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

v Siete

8

1329

09.09.2008 18:32

Marye Zobrazenie posledných príspevkov


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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra