Stránka: 1 z 1
| [ Príspevkov: 29 ] | |
Autor | Správa |
---|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ako mam ochrániť moju stránku pred sql injectami
teda mam adresu napr nieco.sk/clanok.php?id=2
ale keď tam dám nieco.sk/clanok.php?id=2 or 1=1 tak sa mi zobrazia všetky články
tak ako to teda opraviť?
|
|
Registrovaný: 04.04.08 Prihlásený: 27.02.12 Príspevky: 531 Témy: 27 | 27 Bydlisko: Nitra |
Napr. ak máš iba ID článku (clanok.php?id=1), tak to môžeš ošetriť napr. takto:
Kód: $id = intval($_GET["ID"])
Prípadne to ešte môžeš prehnať funkciou od stenleyho (safety() - nájdeš to v Často používaných skriptoch)
_________________ V príprave... |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
satety nejak nefunguje na napr or 1=1
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
musis si ju doplnit o dalsie "ochrany" lebo verzia, ktora je zverejnena, osetruje len zakladne veci... odstranis napr "rovna sa"... dalej, ked vies, ze selectujes len jeden clanok, tak daj do sql LIMIT 1
_________________ 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 |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
aha to vyzerá zaujímavo
ja to zatial riešim pomocou is_numeric
myslíte že to stačí?
|
|
Registrovaný: 26.11.06 Prihlásený: 09.10.24 Príspevky: 4118 Témy: 319 | 319 Bydlisko: HE/BA |
Dalo by sa nejako zariadiť aby sa odstránili z reťazca všetky nečíselné znaky?
|
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
miso250593 píše: aha to vyzerá zaujímavo
ja to zatial riešim pomocou is_numeric
myslíte že to stačí?
ja to v podstate tiež ošetrujem is_numeric()
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Drako píše: Dalo by sa nejako zariadiť aby sa odstránili z reťazca všetky nečíselné znaky?
napr. pomocou ereg_replace a pribuznych funkcii,pripadne si celu tu hodnotu prevedies na ciselnu hodnotu...
_________________ 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 |
|
Registrovaný: 26.11.06 Prihlásený: 09.10.24 Príspevky: 4118 Témy: 319 | 319 Bydlisko: HE/BA |
stenley píše: napr. pomocou ereg_replace a pribuznych funkcii, Ako by to vyzeralo? ereg_replace veľmi neovládam stenley píše: pripadne si celu tu hodnotu prevedies na ciselnu hodnotu... No veď to práve chcem, len neviem ako ![:)](https://www.pcforum.sk/images/smilies/smile02.gif)
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
cez ereg_replace by to vyzeralo nasledovne:
Kód: echo ereg_replace("[^0-9]","",$str);
tj, z hodnoty premennej $str sa vymaze kazdy neciselny znak...
prevod na ciselnu hodnotu spravis cez intval(), pripadne cez pretypovanie...
_________________ 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 |
|
Registrovaný: 26.11.06 Prihlásený: 09.10.24 Príspevky: 4118 Témy: 319 | 319 Bydlisko: HE/BA | |
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ale to is_numeric je postačujúce nie?
dá sa to nejak obísť?
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
neda.... is_numeric je naj, pokial vies, ze to bude len cislo.... a ked vyberas jeden clanok, nezabudni na LIMIT 1 ![;)](https://www.pcforum.sk/images/smilies/smile03.gif)
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
a ako sa dá ochrániť INSERT INTO?
povedzme pri komentároch?
ja používam funkciu tu z fóra safety myslíte že to stačí?
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Spôsobov, ako spáchať SQL injection je veľa, každý iný.
mysql_real_escape_string by ti mohol pomôcť, ale nie je 100%.
Najlepší je whitelisting, čiže prejdeš vstup pomocou regexp-u a povolíš zápis do DB iba v prípade, že string prejde testom. Pozri, preg_match. Určite budeš potrebovať regulárne výrazy (regexp), tie si pozri napríklad na www.regular-expressions.info .
Proti jednému z typov sql injection je vhodné nepoužívať hodnota=1, ale hodnota="1". Všade s uvodzovkami, nie bez.
Keď ste hovorili o tých číslach, pomocou ereg_replace určite nie, to je príliš pomalé. settype, prípadne intval je presne na to, ale settype je rýchlejší (robil som benchmark).
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
prepáč ale takto nechápem nedáš mi aj príklad prosím?
|
|
Registrovaný: 17.10.06 Prihlásený: 08.01.11 Príspevky: 1752 Témy: 17 | 17 |
pozeram, ze v tejto teme este nikto nespomenul prepared statements, tak pozri aj tie.
_________________ A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table. |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Napríklad ak vieš, že prihlasovacie meno je zložené iba z malých písmen (bez diakritiky) alebo čísel, s maximálnou dĺžkou 12 znakov, tak spravíš:
Kód: $meno = (preg_match("([a-z0-9]{1,12})",$_POST['meno']))?$_POST['meno']:null;
Na toto si sa pýtal?
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ja som to ale chcel len do komentárov, formulára pomocou ktorého mi môže komentovať články na stranke
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
ereg("^[a-žA-Ž\s\d\-_?!.,]*$",$testovana_premenna)
Tam máš povolené písmená, čísla, medzery, tabulátory, nové riadky a znaky -_?!.,
Ak ti nestačia tieto znaky, napíš, poradím.
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
a keď to tým testom neprejde tak to odošle práznu kolonku alebo tie znaky nepovolené len odstráni?
|
|
Registrovaný: 09.09.07 Prihlásený: 07.11.16 Príspevky: 3114 Témy: 233 | 233 Bydlisko: Nové Zámky |
if(ereg("^[a-žA-Ž\s\d\-_?!.,]*$",$testovana_premenna)) {
} else {
}
takto.. alebo to dat do preg_replace.. to by slo nie ?
_________________ "It took a lot of work, but this latest Linux patch enables support for machines with 4096 CPUs, up from the old limit of 1024." "Do you have support for smooth full-screen flash video yet?" "No, but who uses that?"
- ak dlho neodpisujem do témy, zabudol som na ňu, takže ma upozornite SS, ak chcete moju odpoveď |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
No to je na tvojom rozhodnutí, či chceš zapísať prázdnu premennú, alebo chceš nehcené znaky odstrániť, prípadne vôbec záznam nezapísať... Povedz si.
Ale poriadne si premysli, aké znaky chceš povoliť. Ešte mi napadlo, že by si asi potreboval *+/
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
no také čo sa môžu dostať do komentárov ale potreboval by som aj znak : kôli smailom a tiež []
a chcem aby sa to zapísalo do databázy bez tých znakov ale aby sa aj vykonal jeden príkaz
|
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 | |
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
nefunguje to preto, lebo to je zle...
a co tak vsetky "nebezpecne" znaky prevadzat na html entity (pripadne escapovat)? v tomto pripade je uplne zbytocne pouzivat regularne vyrazy...
_________________ 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 |
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 | 30 Bydlisko: Bratislava |
naco programovat vlastne riesenia, ked mozeme pouzit casoum overene riesenie?
class.inputfilter.php
v kombinacii s prepared statementom je to bezpecne riesenie.
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Stenley, mi išlo o ukážku whitelistingu
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Registrovaný: 09.07.08 Prihlásený: 17.01.15 Príspevky: 1585 Témy: 96 | 96 |
Už som prišiel konečne na to, ako na diakritiku.
Kód: preg_match("(^[\pL\w\s_\.,?! -]{1,255}$)",$value);
\pL je ten komponent, čo som furt hľadal.
Sorry, ak to je už out of date
_________________ neříkejte, že něco nejde udělat, protože se vždycky najde nějaký blbec, co neví, že to nejde – a udělá to! |
|
Stránka: 1 z 1
| [ Príspevkov: 29 ] | |
|