Jump to content
php.lv forumi

aizsardzibas sistemas majaslapam, papildus drosibai


Devils666

Recommended Posts

  • Replies 31
  • Created
  • Last Reply

Top Posters In This Topic

"aizsardzības sistēmas" izklausās pārspīlēti kruta. kkādu sistēmu ir vērts lietot tikai lapas auditam, lai ar automatizētu testu palīdzību mēģinātu atrast vietas, kur nav ievērota elementāra datu apstrāde/pārbaudes

 

fabula ir ļoti vnkārša: nevajag uzticēties user inputam

 

servera puses "drošībai" (pret sql injekcijām) lieto

function qn($n) {return is_null($n) ? 'NULL' : (float) $n;}  // sagatavo skaitli for mysql query
function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";}  // sagatavo stringu for mysql query

klienta puses "drošībai" (pret "html/css/js injekcijām" jeb xss) lieto

htmlspecialchars()

vārdu "drošībai" lieku pēdiņās, jo šīs lietas ir jāievēro arī pareizai datu apstrādei pat tad, kad drošību neviens neapdraud. piemēram

1) lai tabulā insertotu tekstu ar ', to vajag izlaist caur mysql_real_escape_string(), savādāk tas ' izraisīs mysql error, jo būs priekšlaicīgi aizvērts strings

2) lai lapā ziņas/jaunumu komentāros parādītu <, to vajag eskeipot ar htmlspecialchars(), savādāk tas nebūtu redzams, ja tam blakus būtu vēl kāds teksts, piemēram, <asdf

 

kr4 tas, ka šī datu apstrāde ir saistīta arī ar drošību, tas ir tikai sekundāri

Link to comment
Share on other sites

Var vēl provēt izmantot ModSecurity :) Uz viena servera kur hostēju lapu bija traki pierast - piem, šis uzreiz met Internal Error, ja vairāk par 50 ierakstiem vienā lapā parādās no DB :) Tjipa, laikam domā ka mēģina uztaisīt sql dumpu. Ir vēl visādi patterni, pēc kā viņš čeko un noraida pieprasījumus...

 

http://www.modsecurity.org/

 

Ja kods būs caurumains, nedomāju, ka tas spēs sniegt 100% drošību :)

Edited by briedis
Link to comment
Share on other sites

fabula ir ļoti vnkārša: nevajag uzticēties user inputam

Gandrīz precīzi. Precīzāk būtu - jebkādam inputam.

Citešu no grāmatas "Beautiful Security" (2009):

When we asked the senior Microsoft representatives at dinner why they did not send malicious data or provide malformed files as input to their product's testing, the answer was, "Why would a user want to do that" Their faces bore looks of shock and dismay that anyone would intentionally interact with a piece of software in such a way as to intentionally try to make it fail.

Tas attiecas uz citāda veida inputiem, piemēram, xml+rpc; include() caur parametru vai htaccess, u.c. veidiem, kur tiek saņemts jebkāds inputs, ko useris var manipulēt - ne vienmēr tikai paredzētajā (GUI formas) veidā.

 

servera puses "drošībai" (pret sql injekcijām) lieto

function qn($n) {return is_null($n) ? 'NULL' : (float) $n;}  // sagatavo skaitli for mysql query
function qs($s) {return is_null($s) ? 'NULL' : "'" . mysql_real_escape_string($s) . "'";}  // sagatavo stringu for mysql query

Kāpēc float izpelnījies savu funkciju, bet integeri ne?

Ok, jautāšu uzreiz - kāpēc integerus escape-o nevis typecast-o?

Edited by endrju
Link to comment
Share on other sites

nav runa par int/float

pielietojums ir vispārīgāks: skaitlis & teksts

 

qn() saņem vērtību, kurai ir jābūt skaitlim (EDIT: ar skaitli šeit domāju gan int, gan float). ja padotā vertība nav skaitlis, tad pēc tam toč būs (EDIT: lietoju plašāko (float) castu, jo (int) kasts pakāstu decimāldaļas, bet šī funkcija ir domāta jebkuram skaitlim)

qs() saņem stringu, un eskeipo to, ko vajag eskeipot

Edited by 2easy
Link to comment
Share on other sites

nav runa par int/float

pielietojums ir vispārīgāks: skaitlis & teksts

 

qn() saņem vērtību, kurai ir jābūt skaitlim. ja padotā vertība nav skaitlis, tad pēc tam toč būs

qs() saņem stringu, un eskeipo to, ko vajag eskeipot

varēji vienkārši atbildēt, ka arī integer gadījumā Tu lieto qn(), t.i., (float) typecast.

p.s. skaidrot ko funkcijas dara gan bija redundant overhead.

Link to comment
Share on other sites

tas tev ir viss skaidrs, bet te ir dafiga tautas, kuri vienus un tos pašus jautājumus pēc laika uzdod atkal. pieņem, ka tas overhead bija priekš viņiem ;) kādam vieglāk uztvert garus aprakstus ar atšķaidītu info, citam pietiek ar īsi un kodolīgi...

Link to comment
Share on other sites

Gandrīz precīzi. Precīzāk būtu - jebkādam inputam.

vispārīgāk runājot, es inputu iedalu 2x veidos

1) iekšējais - developer ierakstītās vērtības/konstantes, ko padod/izmanto funkcijās. kā arī tās vērtības, kas kkad ir ienākušas no ārpuses un pēc pārbaudes/apstrādes tgd ir drošas

2) ārējais - viss kas ir ienācis no ārpuses un vēl nav pārbaudīts (kad es teicu "user input", es domāju tieši par šo)

 

jebkādam inputam neuzticēties būtu stulbi, jo ja pats neuzticies sev un vienai savai funkcijai liec vēlreiz pārbaudīt vērtības, ko padod cita tava funkcija, kas jau tās ir pārbaudījusi, tad tā ir kkāda pesimistiska paranoja. parasti plānojot applikācijas arhitektūru, drošības pārbaudēm ir savs līmenis, kurā tiek veiktas visas ar drošību saistītās darbības. bet citi līmeņi tālāk jau saņem drošus datus un var specializēties uz savu darbu

 

tikai nesaki atkal, ka tas ir overheads. noteikti atradīsies kāds, kas par to nebūs aizdomājies :D

btw, tas labi, ka lasi grāmatas ;)

Link to comment
Share on other sites

vispārīgāk runājot, es inputu iedalu 2x veidos

1) iekšējais - developer ierakstītās vērtības/konstantes, ko padod/izmanto funkcijās. kā arī tās vērtības, kas kkad ir ienākušas no ārpuses un pēc pārbaudes/apstrādes tgd ir drošas

2) ārējais - viss kas ir ienācis no ārpuses un vēl nav pārbaudīts (kad es teicu "user input", es domāju tieši par šo)

 

jebkādam inputam neuzticēties būtu stulbi, jo ja pats neuzticies sev un vienai savai funkcijai liec vēlreiz pārbaudīt vērtības, ko padod cita tava funkcija, kas jau tās ir pārbaudījusi, tad tā ir kkāda pesimistiska paranoja. parasti plānojot applikācijas arhitektūru, drošības pārbaudēm ir savs līmenis, kurā tiek veiktas visas ar drošību saistītās darbības. bet citi līmeņi tālāk jau saņem drošus datus un var specializēties uz savu darbu

 

tikai nesaki atkal, ka tas ir overheads. noteikti atradīsies kāds, kas par to nebūs aizdomājies :D

nē, nu viss ok. skaidrs, ka tā nav diskusija tikai divatā. lasa arī citi. gan jau kādam noderēs.

 

btw, tas labi, ka lasi grāmatas ;)

khh, vai tad tik nožēlojamā stāvoklī 21. gs. esam, ka par to kinda of "jāuzslavē"?

citēju ne jau tāpēc, lai parādītu, ka kaut ko lasu, bet adekvāti iederējās.

pats vai tad neko nelasi?

Edited by endrju
Link to comment
Share on other sites

plauktā jau viskas mētājās, bet kkā nesanāk palasīt. googlē visu var ātrāk atrast :D

vsp pie sevis esmu pamanījis tādu prikolu, ka lasot drukātos medijus, bieži gribas uzspiest ctrl+f, bet nevar :D:D:D laikam tā jau ir kkāda diagnoze...

Edited by 2easy
Link to comment
Share on other sites

(EDIT: lietoju plašāko (float) castu, jo (int) kasts pakāstu decimāldaļas, bet šī funkcija ir domāta jebkuram skaitlim)
Nezinu, ko tu domā ar vārdu "plašāko kāstu", bet tavs kāsts nedarbotos uz 64-bitu php, ja tam tiktu padots integer skaitlis lielāks par 2^53. Jo php floati var saturēt tikai 53 zīmīgos bitus (double mantisa), bet 64-bitu php integeri ir 64-bitu plati.
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...