Jump to content
php.lv forumi

ideja kā samazināt lapas uzlauzšanas risku līdz minimumam


1mher3

Recommended Posts

  • Replies 59
  • Created
  • Last Reply

Top Posters In This Topic

Pāris lietas, ko nepamanīju pieminam.

Sadalīt datubāzes lietotāju lomas pa tādiem lietotājiem, kā skatītājs, rakstītājs dzēsējs utt.

Datubāzei slēgties klāt tikai ar šiem lietotājiem.

ja saprotu pareizi,

piemēram, login formas pārbaudei/apstiprināšānai man vajag izmantot:

1 - datu nolasīšanai - lietotāju A (tikai SELECT)

2 - login datuma atjaunošanai - lietotāju B (tikai UPDATE)

3 - nepareiza login piefiksēšanai - lietotāju C (tikai INSERT)

tas ko es neizprotu - kāds ieguvums drošības ziņā ir 3 dažādu useru izmantošanai salīdzinājumā ar vienu kuram tiesības gan SELECT, INSERT, UPDATE?

 

Šiem lietotājiem atļaut izpildīt tikai konkrētas saglabātās procedūras (mysql gadījumā šis).

Neatļaut šiem lietotājiem izpildīt nekādas citas darbības pa tiešo ar tabulām, bet visu funkcionalitāti realizēt tikai ar iepriekšdefinētajām funkcijām.

kas jādara lai to realizētu?

Edited by 1mher3
Link to comment
Share on other sites

1mher3, ieguvums ir taads, ja

ļaunais hakeris dabuun tavu treshu lietotaaju (INSERT) vinsh nevar nolasiit tabulas datus (redzeet kas tur staav iekshaa)

ja vinsh dabuu pirmo (SELECT) vinsh redz kas tur ir, bet nevar pievienot jaunu (adminu piem)

utt ....

 

te veel aizgaaja par to ka savaa funkcijaa izmantot jau iebuuveetu funkciju

 

piem:

function isValidFileName($file) {
/* don't allow .. and allow any "word" character \ / */
return preg_match('/^(((?:\.)(?!\.))|\w)+$/', $file);
}

 

sanaak iisaak rakstiit un ja vajag kaut ko pielabot, jaalabo tikai vienaa vietaa ...

un gadiijumaa ja vajag tad to paarbaudi (funkciju) var paarrakstiit

Edited by Klez
Link to comment
Share on other sites

Ideja ir tāda, ka lietotājam A vispār nedot tiesības SELECT,UPDATE vai DELETE pa taisno tabulā, bet gan nodefinēt storēto procedūru MySQLā (arī citās DB līdzīgi):

Tātad nevis ļaujam lietotājam A veikt SELECT * FROM zinas, bet gan:

mysql> delimiter //
mysql> CREATE PROCEDURE radit_zinas -> BEGIN ->   SELECT * FROM zinas;
   -> END;
   -> //

Un attiecīgi datubāzes piekļuves tiesībās ierakstīt, ka lietotājam A ir tiesības izpildīt procedūru radit_zinas, bet nevis brīvi izvēlētus SQL vaicājumus. Tāda tā pamatdoma.

Link to comment
Share on other sites

nutiko radās šāda ideja:

izmantot divas datubāzes - primāro on alternatīvo kurā tiek dublēti svarīgākie dati.

otrajai datubāzei piesaistīt userus tikai ar tiesībām SELECT un INSERT.

 

un uzrakstīt funkciju kura salīdzina un brēc ja ieraksti nesakrīt.

 

tas kaut ko jēdzīgu drošības ziņā dotu?

Link to comment
Share on other sites

Tu domā datubāzes BACKUP? Nu jā, tas nav nekas jauns un tiešām drošības ziņā tā ir drošāk - tik tiem datiem vajadzētu glabāties, kur citur, jo BACKUP ideja ir rezerves kopijas principā! Atkarībā no datu atjaunošanas biežuma Tavā projektā ir jāveic DB backupi! Parasti aktīvos projektos tas notiek reizi diennaktī! Var gadīties, ka nepieciešams ir arī 2x dienā!

Link to comment
Share on other sites

Lūdzu nevajag taisīt bezjēdzīgas QUOTEs

 

par backup ta skaidris ...

 

bet es domāju svarīgākos datus uzreiz rakstīt divās datu bāzēs, vienai no kurām nav pievienoti useri ar tiesībām izdzēst vai izmainīt (Tad vienīgais man zināmais veids kā tur kko sačakarēt būtu ja tiek klāt hostinga cpanel)

Link to comment
Share on other sites

Priekš kam Tev lieka greznība un resursu patēriņš - divas datubāzes? Nepietiks ar diviem lietotājiem uz vienu datubāzi? Vajag vienkārši pareizi sakonfigurēt, lai būtu droši! Rokasgrāmatas palīdzēs! Viens useris - "public" - ar iespējām tikai selectot attiecīgās tabulas, kādā tabulā varbūt vēl insertot un kādā vēl delete, skaties katrai tabulai atsevišķi. Citām varbūt pat select nevajag "public" userim! "Admin" userim atkal savas tiesības... Par divām datubāzēm - samudžināsi visu pats, tas vairāk nepieciešams, ja nu viena datubāze atrubās (ūbersvarīgiem projektiem), tad ieslēdzās otra kaut kā tā - un abas stāv uz atsevišķiem serveriem. Datubāzi dublēt varēsi backupos, kur tev stāvēs attiecīgā datuma un laika "rezerves kopija", lai minimizētu zaudējumus avārijas gadījumā!

Link to comment
Share on other sites

Ok, tātad tu gribi, ka DB1 būtu tā, no kuras var tikai lasīt.

DB2 tāda kurā var arī rakstīt.

Kas notiek, ja es izdzēšu ierakstu no DB2?

Kas notiek, ja es izmainu ierakstu iekš DB2?

Kas notiek, ja ...

Tad es par to ka ieraksti izmanīti uzzinu līdzko ieskatos admina daļā (kurā būtu scripts kas detaktē ka ieraksti nesapas), nevis kad dusmīgs users atraksta emailu jo netiek sava kontā iekšā.

Link to comment
Share on other sites

Lūdzu nevajag taisīt bezjēdzīgas QUOTEs

 

nē...

piemēram, users Aleksejs nomainījis paroli, bet datubāzē nav piefiksēts ka maiņa apstiprināta izmantojot apstiprinājuma linku (ir tāda plaši pielietota sistēma - lai usera pieprasījums mainīt paroli tiktu pārbaudīts, useram tiek nosūtīts mails ar apstiprinākuma linku, tas links šim ir jāuzspiež...), tātad parole kautkādā veidā nomainīta apejot sistēmu...

Link to comment
Share on other sites


×
×
  • Create New...