[ 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ý: 30.11.14
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

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

Registrovaný: 01.10.06
Prihlásený: 27.09.15
Príspevky: 1979
Témy: 114 | 114
Bydlisko: your momma'...
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


_________________
duri je gej
Offline

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

Registrovaný: 28.02.07
Príspevky: 358
Témy: 25 | 25
Bydlisko: Podvysoká, ...
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: 1757
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ý: 30.11.14
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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
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

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: 3971
Témy: 51 | 51
Bydlisko: Bratislava
Vek: 32
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...


_________________
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

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

Registrovaný: 17.10.06
Prihlásený: 08.01.11
Príspevky: 1757
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

1106

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

248

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

375

16.05.2010 15:29

ac.milan

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

SQL injection

v Služby a webstránky

1

72

27.02.2014 17:36

walther

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

SQL injection

v Databázy

7

561

11.01.2010 17:17

Antuanet

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

SQL Injection

v PHP, ASP

2

428

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

298

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

354

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

546

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

371

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

195

09.04.2012 21:59

BX

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

189

17.04.2017 21:54

tairikuokami

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

97

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

691

04.01.2011 12:20

prohibit

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

Ochrana stranky pred "naklikavacmi"

v Ostatné

0

294

28.06.2010 22:53

scrysurn

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



© 2005 - 2017 PCforum, edited by JanoF