[ 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 | 10
NapísalOffline : 09.06.2008 14:15 | Ochrana pred SQL injection

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 | 53
NapísalOffline : 09.06.2008 16:19 | Ochrana pred SQL injection

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 | 38
Bydlisko: Kálnica city
NapísalOffline : 09.06.2008 16:23 | Ochrana pred SQL injection

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
NapísalOffline : 09.06.2008 17:04 | Ochrana pred SQL injection

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
NapísalOffline : 09.06.2008 17:14 | Ochrana pred SQL injection

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 | 17
NapísalOffline : 09.06.2008 19:28 | Ochrana pred SQL injection

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 | 53
NapísalOffline : 09.06.2008 19:47 | Ochrana pred SQL injection

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 | 10
Napísal autor témyOffline : 10.06.2008 15:37 | Ochrana pred SQL injection

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 | 10
Napísal autor témyOffline : 11.06.2008 13:49 | Ochrana pred SQL injection

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 | 51
Bydlisko: Bratislava
NapísalOffline : 11.06.2008 19:13 | Ochrana pred SQL injection

$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 | 1
NapísalOffline : 11.06.2008 19:39 | Ochrana pred SQL injection

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 | 51
Bydlisko: Bratislava
NapísalOffline : 11.06.2008 21:20 | Ochrana pred SQL injection

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 | 17
NapísalOffline : 11.06.2008 21:49 | Ochrana pred SQL injection

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 | 1
NapísalOffline : 11.06.2008 22:09 | Ochrana pred SQL injection

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 | 10
Napísal autor témyOffline : 12.06.2008 19:53 | Ochrana pred SQL injection

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 | 1
NapísalOffline : 12.06.2008 20:09 | Ochrana pred SQL injection

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 | 10
Napísal autor témyOffline : 14.06.2008 17:08 | Ochrana pred SQL injection

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??


 [ Príspevkov: 17 ] 


Ochrana pred SQL injection



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

1517

12.12.2008 0:49

rooobertek

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

SQL Injection ochrana

v PHP, ASP

11

587

13.02.2014 12:03

GoodWill

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

Ochrana proti SQL INJECTION

v PHP, ASP

3

641

16.05.2010 15:29

ac.milan

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

SQL injection

v Databázy

7

839

11.01.2010 17:17

Antuanet

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

SQL injection

v Služby a webstránky

1

323

27.02.2014 17:36

walther

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

SQL Injection

v PHP, ASP

2

705

07.01.2010 20:43

rooobertek

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

sql injection a ine

v PHP, ASP

5

498

25.02.2010 5:44

rooobertek

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

hrozi mi v tomto priklade sql injection ?

v PHP, ASP

10

644

06.02.2010 9:57

Ďuri

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

spam ochrana, sql ochrana

v PHP, ASP

14

911

08.01.2011 23:56

Feko

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

644

03.11.2008 22:17

rooobertek

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

ochrana pred rovnakymi obrazkami

v PHP, ASP

1

491

09.04.2012 21:59

BX

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

Ochrana pred vírusmi a hrozbami

v Antivíry a antispywary

1

743

19.03.2021 17:58

Vinchenzo

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

722

17.04.2017 21:54

tairikuokami

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

Ochrana CNC stroja pred vírusom

v Siete

5

431

13.10.2020 22:57

maiob

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

404

08.11.2012 10:35

dodos

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

996

04.01.2011 12:20

prohibit



© 2005 - 2024 PCforum, edited by JanoF