[ 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 | 74
Bydlisko: Michalovce
NapísalOffline : 25.02.2009 8:51 | spam ochrana, sql ochrana

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: 3991
Témy: 96 | 96
NapísalOffline : 25.02.2009 8:58 | spam ochrana, sql ochrana

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 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 25.02.2009 10:18 | spam ochrana, sql ochrana

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: 3991
Témy: 96 | 96
NapísalOffline : 25.02.2009 10:50 | spam ochrana, sql ochrana

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 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 25.02.2009 11:28 | spam ochrana, sql ochrana

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: 3991
Témy: 96 | 96
NapísalOffline : 25.02.2009 11:41 | spam ochrana, sql ochrana

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 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 25.02.2009 16:01 | spam ochrana, sql ochrana

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: 3991
Témy: 96 | 96
NapísalOffline : 25.02.2009 18:35 | spam ochrana, sql ochrana

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 | 74
Bydlisko: Michalovce
Napísal autor témyOffline : 26.02.2009 18:47 | spam ochrana, sql ochrana

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: 3991
Témy: 96 | 96
NapísalOffline : 26.02.2009 18:54 | spam ochrana, sql ochrana

:) 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 | 37
NapísalOffline : 08.01.2011 20:52 | spam ochrana, sql ochrana

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: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 08.01.2011 21:01 | spam ochrana, sql ochrana

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 | 37
NapísalOffline : 08.01.2011 21:20 | spam ochrana, sql ochrana

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: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 08.01.2011 21:27 | spam ochrana, sql ochrana

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 | 37
NapísalOffline : 08.01.2011 23:56 | spam ochrana, sql ochrana

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


 [ Príspevkov: 15 ] 


spam ochrana, sql ochrana



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

248

13.02.2014 12:03

GoodWill

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

Ochrana pred SQL injection

v PHP, ASP

16

1175

14.06.2008 17:08

lostwarrior

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

ochrana pred sql injection

v PHP, ASP

28

1106

12.12.2008 0:49

rooobertek

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

Ochrana proti SQL INJECTION

v PHP, ASP

3

376

16.05.2010 15:29

ac.milan

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

Aka ochrana zariadenia (bleskoistka, prep. ochrana)

v Siete

2

227

06.10.2012 18:38

peto007

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

Rezidentná ochrana vs. rezidentná ochrana

v Antivíry a antispywary

6

886

23.04.2008 22:56

strongy

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

Ochrana

v Antivíry a antispywary

2

561

20.12.2007 12:42

shiro

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

ochrana

v Antivíry a antispywary

8

755

24.01.2008 14:20

mimkork

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

ochrana

v Elektronika

3

616

31.01.2008 16:53

bugi512

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

2826

05.06.2008 15:51

Qpkqkma

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

Prepäťová ochrana

v PC skrinky, zdroje a všetky druhy chladenia

5

390

07.07.2009 11:23

Victorious_

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

Prepäťova ochrana

v PC skrinky, zdroje a všetky druhy chladenia

13

759

26.11.2007 10:50

Aqw3R

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.

Ochrana súkromia

v Sociálne siete

5

150

11.04.2017 18:07

patro16

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

ochrana webky

v Ostatné

3

368

15.01.2009 9:28

mokus

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

Prepeťova ochrana

v PC skrinky a zdroje

3

150

02.01.2012 20:36

KatjushaMan



© 2005 - 2017 PCforum, edited by JanoF