Obsah fóra
PravidláRegistrovaťPrihlásenie




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

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

Registrovaný: 23.04.08
Prihlásený: 31.08.08
Príspevky: 37
Témy: 10
Príspevok NapísalOffline : 09.06.2008 14:15

Nazdarek.. Skusam si spravit skript kde by bola jednoducha ochrana pred SQL injection. Chcel by som vas poprosit, ci by ste sa nemohli mrknut na skript, ci som ho spravne zapisal, ci je to postacuje, popripade mi opravit chyby a vysvetlit..Dik za kazdu pomoc..

SKRIPT:
<?
session_start();
$link=mysql_connect("xxxxx", "xxxxx", "xxxx");
mysql_select_db("xxxx");
$name= addslashes(htmlspecialchars($_POST['nick'])) ;
$hes= MD5($_POST['pass'])) ;
$vysledek=mysql_query("select meno, heslo from users where meno='$name' and heslo='$hes' ");
$id = mysql_fetch_array($vysledek);
if ($id<>0) $_SESSION["nick"]=($_POST["nick"]);

$prihlas=true;
if (!empty($_POST["nick"]) || !empty($_POST["pass"]))
{
if (!isset($_SESSION["nick"])) echo "Uživatelské meno alebo heslo nesuhlasí";
else
{
$prihlas=false;
Header("Location: index.php");
}
}

if ($prihlas):?>
<form method="post" action="login.php">
<table>
<tr>
<td>Meno:</td>
<td><input name="nick" value="<?echo $_POST["nick"]?>"></td>
</tr>
<td>Heslo:</td>
<td><input name="pass" type = "password" value="<?echo $_POST["pass"]?>"></td>
</tr>
<tr>
<td colspan="2"><input type="Submit" name="odesli" value="Prihlásiť"></td>
</tr>
</table>
</form>
<?endif;?>


Offline

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

Registrovaný: 21.01.07
Prihlásený: 29.03.20
Príspevky: 660
Témy: 53
Príspevok NapísalOffline : 09.06.2008 16:19

Kód:
$name= addslashes(htmlspecialchars($_POST['nick'])) ;


Toto nebude stačiť. Stlačilo by, ak by ti niekto vložil:

Kód:
voľačo\'


a následne sa to zmení na:

Kód:
voľačo\\'


Skús túto funkciu:

Kód:
function opravitchyby($vstup) {

global $link;

if (ini_get('magic_quotes_gpc')) {
  $vstup = stripslashes($vstup);
}
  return mysql_real_escape_string($vstup, $link);

}


Offline

Užívateľ
Užívateľ
Ochrana pred SQL injection

Registrovaný: 25.07.07
Prihlásený: 27.11.14
Príspevky: 217
Témy: 38
Bydlisko: Kálnica city
Príspevok NapísalOffline : 09.06.2008 16:23

do formularovych inputov si dopis hodnotu maxlength - ako moze byt dlhy nick/heslo.


Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok NapísalOffline : 09.06.2008 17:04

Matho píše:
do formularovych inputov si dopis hodnotu maxlength - ako moze byt dlhy nick/heslo.


Ano, niekto si vymysli vlastny form a posle mu 20000 znakov. Maxlenght nestaci ! Ked uz, tak aspon substr na nejakych 20 znakov. To uz tak lahko neobides


Offline

Zmazaný užívateľ
Zmazaný užívateľ
Obrázok užívateľa
Príspevok NapísalOffline : 09.06.2008 17:14

Numline1 píše:
Ano, niekto si vymysli vlastny form a posle mu 20000 znakov. Maxlenght nestaci ! Ked uz, tak aspon substr na nejakych 20 znakov. To uz tak lahko neobides


Substr ?? Da sa to ano aj tak, ale podla mna je lepsie strlen.

Ok... pomylil som sa ... najlepsie je pouzit aj substr aj strlen


Offline

Čestný člen
Čestný člen
Ochrana pred SQL injection

Registrovaný: 17.10.06
Prihlásený: 08.01.11
Príspevky: 1752
Témy: 17
Príspevok NapísalOffline : 09.06.2008 19:28

pepek92: neviem aku verziu php pouzivas ale na 5.2.4 ide uplne v poho. vystup tvojho prikladu vyzera takto: aaa\\\\\\\' a ak si to spocitas tak zistis, ze je to vyescapovane spravne :)







_________________
A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table.
Offline

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

Registrovaný: 21.01.07
Prihlásený: 29.03.20
Príspevky: 660
Témy: 53
Príspevok NapísalOffline : 09.06.2008 19:47

Aha, tak potom sorry, asi som sa mierne sekol. Ospravedlňujem sa.


Offline

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

Registrovaný: 23.04.08
Prihlásený: 31.08.08
Príspevky: 37
Témy: 10
Príspevok Napísal autor témyOffline : 10.06.2008 15:37

No priznam sa ze nejako moc nechapem pouzitie tej funkcie.. Pozeral som k tomu nieco na nete, ale dopracoval som sa skor k tomu, ze funkcia mysql_real_escape_string bola pouzita v samotnom dopyte.. Cize nieco take:
$vysledek=mysql_query("select meno, heslo from users where meno = '".mysql_real_escape_string($_GET['nick'])."' and heslo='$hes' ");

Tak teraz neviem..ci aj toto je postacujuce riesenie.a ci to nahradi addslashes, htmlspecialchars...Alebo ak by mi mohol niekto ukazat pouzitie tej funkcie na mojom prihlasovaciom skripte a troska vysvetlit..


Offline

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

Registrovaný: 23.04.08
Prihlásený: 31.08.08
Príspevky: 37
Témy: 10
Príspevok Napísal autor témyOffline : 11.06.2008 13:49

No takze som trocha patral po tych ochranach proti SQL a narazil som na nieco take:

$input = Vstupny input

$is_sql = Kontrola ci nahodou $input nie je sql query

$username = sterilize($_POST['username']);

$query = "SELECT * FROM users WHERE username = '$username'";

*/

function sterilize ($input, $is_sql = false)
{
$input = htmlentities($input, ENT_QUOTES);

if(get_magic_quotes_gpc ())
{
$input = stripslashes ($input);
}

if ($is_sql)
{
$input = mysql_real_escape_string ($input);
}

$input = strip_tags($input);
$input = str_replace("
", "\n", $input);

return $input;
}

Zaujimalo by ma vsak co presne znamena ta premenna $input . Ma to byt nadefinovane ako name z formulara?? Tzn:
$input = "odesli"

Je toto dobra ochrana pred SQL injection??


Offline

Správca fóra
Správca fóra
Ochrana pred SQL injection

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 11.06.2008 19:13

$input je lokalna premenna funkcie sterilize(), cize ked pouzijes
Kód:
$username = sterilize($_POST['username']);

tak $input bude obsahovat hodnotu z $_POST['username'], ktora bola zaslana vo formulari
Kód:
<form method="post">
   <input type="text" name="username">
</form>

kedze sa jedna pravdepodobne o prihlasovacie meno, nebolo by odveci povolit len pouzitie alfanumerickych znakov - aj tak sa da chranit pred sql injection...







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

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

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 11.06.2008 19:39

dobra ochrana proti mysql injections je nepouzivat mysql :P ale v tom zmysle ze pouzijes krasne objektove mysqli. cize get parametre mozes osetrit takto:
najskor zavolas objekt mysqli

Kód:
@$con = new mysqli(SERVER, LOGIN, PASSWORD, DB_NAME);

if (mysqli_connect_errno())

  die("mysqli error");


$con->autocommit(FALSE); // a vypnes autocommit


a takto selectujes z databazy podla ID

Kód:
$stmt = $con->prepare("SELECT t1, t2 FROM example WHERE id = ?;");
$stmt->bind_param("i", $_GET['id']);
$stmt->execute();
$con->commit();
$stmt->bind_result($t1, $t2);
while ($stmt->fetch()) {
        echo $t1 . " " . $t2;
}
$stmt->close();


cize postupne:
select si "pripravis" tak ze co chces dosadit vymenis za ?
pomocou bind_param presne podla postupnosti otazknikov predavas parametre tejto funkcii. ale hned prvy parameter definujes ako datovy typ parametru.
cize ked mas parametre povedzme integer, integer, string, integer, tak das.

Kód:
$stmt->bind_param('iisi');

viac podrobnosti najdes na http://php.net

tiez by som odporucal regularne vyrazy alebo jednoducho ked uz nechces pouzivat mysqli tak ako si nacitaj do premennej nejaky get napr takto. ked vies ze get id bude integer tak:
Kód:
$id = (is_numeric($_GET['id'])) ? $_GET['id'] : -1;

a to potom doplnis do mysql dopytu. je toho viac. staci si vybrat.


Offline

Správca fóra
Správca fóra
Ochrana pred SQL injection

Registrovaný: 27.07.07
Príspevky: 3948
Témy: 51
Bydlisko: Bratislava
Príspevok NapísalOffline : 11.06.2008 21:20

najlepsie je mozno osetrit vsetky hodnoty, ktore ziskas od uzivatela (post,get), naraz pomocou array_map a pod. Takto nemusis upravovat kazdu jednu hodnotu zvlast...







_________________
NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE
Offline

Čestný člen
Čestný člen
Ochrana pred SQL injection

Registrovaný: 17.10.06
Prihlásený: 08.01.11
Príspevky: 1752
Témy: 17
Príspevok NapísalOffline : 11.06.2008 21:49

neskusal som, ale nevidim dovod, preco by sa nedali prepare statements pouzit aj bez mysqli :)







_________________
A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table.
Offline

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

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 11.06.2008 22:09

stenley píše:
najlepsie je mozno osetrit vsetky hodnoty, ktore ziskas od uzivatela (post,get), naraz pomocou array_map a pod. Takto nemusis upravovat kazdu jednu hodnotu zvlast...

samozrejme. kazdy ma vlastnu metodu osetrovania sql. tazko povedat ktora je najlepsia. kazdy si bude tvrdit ze ta jeho :P jem mozne pouzit uz existujuce riesenia alebo nakodit si nieco vlastne. takze vyberat z coho je. staci si zvolit tu spravnu cestu. ktora to je uz zavysi od kazdeho zvlast.

Suchy: samozrejme mozes pouzit tiez vela variant. prepare statements v mysql. ale aj tak myslim ze mysqli ma oproti mysql dost navrch. napriklad kedze pracuje so sqlite je ju mozne synchronizovat napr s pysqlite2 alebo podobne vychytavky. ako som uz napisal. je to kazdeho osobna vec.


Offline

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

Registrovaný: 23.04.08
Prihlásený: 31.08.08
Príspevky: 37
Témy: 10
Príspevok Napísal autor témyOffline : 12.06.2008 19:53

Nechcem zacinat novy topic, tak to hodim sem..ved v podstate sa to tyka SQL injection.
Zaujimalo by ma ako riesit resp. mate riesene zabezpecenie URL proti SQL injection.
Napr. V mailoch URL pre aktivaciu.
Povedzme ze mate takuto URL :
"Pre aktiváciu účtu kliknite na následujuci odkaz: http://www.pokus.com/registraciadokoncena.php?a=$meno"

Alebo v odkazoch:
<a href='www.pokus.com/info.php'>Pokus</a>"

Mozte mi poradit? Alebo hodit nejaky dobry link, kde je nieco k tejto problematike? Lebo co som nasiel cez google tak moc nefungovalo alebo bolo len rozpisane ako cez URL "napadnut" web.. :cry:

PS: Dik za rady .


Offline

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

Registrovaný: 08.06.08
Prihlásený: 09.07.08
Príspevky: 39
Témy: 1
Príspevok NapísalOffline : 12.06.2008 20:09

no ved z url je to to iste ako napr z formualru ale nepouzivas POST premenne ale GET. cize ak mas to tvoje ?a=meno tak osetrujes premennu $_GET['a'];

sposobmi ake tu boli pouzite. napr htmlspecialchars(), addslashes() etc... pozri vyssie







_________________
XMPP(Jabber): k3tch@xmpp.sk
No money? No Credit? Eat shit!
Offline

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

Registrovaný: 23.04.08
Prihlásený: 31.08.08
Príspevky: 37
Témy: 10
Príspevok Napísal autor témyOffline : 14.06.2008 17:08

No to mam osetrene..Ale skor ma zaujima, ako spravit napr. to, aby v url nebolo vidiet ten skript registraciadokoncena.php. Da sa to??http://www.pokus.com/registraciadokoncena.php?a=$meno"

A este jedna vec.
Skusal som premenu $meno kodovat cez md5, no pri kliknuti na odkaz pre potvrdenie aktivacie mi to nezmenilo hodnotu, resp. neurobilo update v Tabulke. V com by mohol byt problem??


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


Podobné témy

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

v PHP, ASP

28

1498

12.12.2008 0:49

rooobertek Zobrazenie posledných príspevkov

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. SQL injection

v Služby a webstránky

1

293

27.02.2014 17:36

walther Zobrazenie posledných príspevkov

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

v Databázy

7

814

11.01.2010 17:17

Antuanet Zobrazenie posledných príspevkov

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

v PHP, ASP

2

679

07.01.2010 20:43

rooobertek Zobrazenie posledných príspevkov

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

v PHP, ASP

5

471

25.02.2010 5:44

rooobertek Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. hrozi mi v tomto priklade sql injection ?

v PHP, ASP

10

613

06.02.2010 9:57

Ďuri Zobrazenie posledných príspevkov

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

v PHP, ASP

14

851

08.01.2011 23:56

Feko Zobrazenie posledných príspevkov

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

v Operačné systémy Unix a Linux

5

609

03.11.2008 22:17

rooobertek Zobrazenie posledných príspevkov

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

v PHP, ASP

1

464

09.04.2012 21:59

BX Zobrazenie posledných príspevkov

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

v Antivíry a antispywary

1

650

19.03.2021 17:58

Vinchenzo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ochrana dieťaťa pred nevhodnou stránkou

v Sieťové a internetové programy

6

672

17.04.2017 21:54

tairikuokami Zobrazenie posledných príspevkov

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

v Siete

5

365

13.10.2020 22:57

maiob Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Moje dokumenty - ochrana pred zmenou ich obsahu

v Operačné systémy Microsoft

2

363

08.11.2012 10:35

dodos Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ochrana fora pred spamami a "spamovymi uzivatelmi"

v Redakčné systémy

4

956

04.01.2011 12:20

prohibit 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