waplet Posted October 4, 2008 Report Share Posted October 4, 2008 LOl Grey wolf , man jau prikolē funkciju : IzvadaUzEkrāna :DDD Link to comment Share on other sites More sharing options...
1mher3 Posted October 4, 2008 Author Report Share Posted October 4, 2008 (edited) paldies par jūsu atbildēm un ieteikumiem. tatad taisīt nekonenozīmējošus tabulu un aiļu nosaukumus nev pilnīgi nekādas jēgas? protams $_GET un $_POST tiek izmantots man uztaisīts tā: ar $_GET pirms funkciju izpildes ir if ($_GET[identifikators]='vajadziigaa veertiiba') ar $_POST... $x=strip_tags($_POST[x]); vai ar to pietiek? vai ir zināms vienkāršs veids/scripts kā detaktēt standarta uslauzšanas metodu izmantošanas mēģinājumus? ideja .htaccess failā automātiski ierakstīt: deny from xxx.xxx.xxx.xxx Edited October 4, 2008 by 1mher3 Link to comment Share on other sites More sharing options...
bubu Posted October 4, 2008 Report Share Posted October 4, 2008 Ar to nepietiek gan. = vietā jālieto == strip_tags vietā ir jālieto mysql_real_escape (ja lieto MySQL). Kā arī, kā jau Grey_Wolf teica, vajag pārbudīt datu tipus. Link to comment Share on other sites More sharing options...
1mher3 Posted October 4, 2008 Author Report Share Posted October 4, 2008 (edited) Ar to nepietiek gan.= vietā jālieto == strip_tags vietā ir jālieto mysql_real_escape (ja lieto MySQL). Kā arī, kā jau Grey_Wolf teica, vajag pārbudīt datu tipus. informāciju par mysql_real_escape funkciju php.net neatradu. Ko tas zvērs dara? Grey_Wolf... Vienmer parbaudiit ienakoshos datus --> ja var sanjemt tikai INT tad ienakosos datus parkonverteet par INT ... man tumša bilde kādā veidā to pārbaudi izdarīt. Edited October 4, 2008 by 1mher3 Link to comment Share on other sites More sharing options...
Endijs Posted October 4, 2008 Report Share Posted October 4, 2008 bubu nedaudz saīsināja pierakstu. Funkcija ir mysql_real_escape_string http://lv.php.net/manual/en/function.mysql...cape-string.php Pārkonvertēšana uz int: $x = (int)$_GET['lapa']; Link to comment Share on other sites More sharing options...
Grey_Wolf Posted October 4, 2008 Report Share Posted October 4, 2008 (edited) vel var piebilst ka visiem datiem velams sakumaa 'uzriidiit' trim() f-ju .. tas ljaus izvairiities no tuksiem datiem (nonjem tuksumus no sakuma un beigaam ) P.S. protams jaskataas vai Vienmer to vajag , bet kaa raada prakse 90% vajag gan Edited October 4, 2008 by Grey_Wolf Link to comment Share on other sites More sharing options...
Squad Posted October 5, 2008 Report Share Posted October 5, 2008 http://www.ibm.com/developerworks/opensour...apps/index.html (uz doto brīdi zem maintenance) Link to comment Share on other sites More sharing options...
mounkuls Posted October 5, 2008 Report Share Posted October 5, 2008 Grey_Wolf tiešām minēja lielāko daļu visu, ko vajadzētu noteikti. Kautkur mineja strip_tags(), var arī to, bet ir gadijumi, kad lietotājam var ļaut rakstīt tagus lai būtu skaidrs, ko gribēja uzrakstīt (protams, tad jūtīgos simbolus es aizstāju ar kodu, tādā veidā nesamaitājot stringa vizuālo). Par INT esmu ar visām četrām, ja to var. Vēl tikai varu teikt, ka pat tad, ja formai ir hidden lauki, arī tos obligāti vajag pārbaudīt. Varbūt šis aplami, bet labāk ja register_globals off visu. Neskopoties ar mainīgo definēšanu+if(isset()). Debugojot errori ieslēgti, uz hosta jau izslēgti. Par Toms makeSafe()...katrs dara kā grib, tikai jēga manuprāt būtu ja tajā makeSafe() ir kas vairāk kā jau standarta funkcija. Link to comment Share on other sites More sharing options...
Toms Posted October 5, 2008 Report Share Posted October 5, 2008 Es saprotu, ka nav jēgas dublēt gatavas PHP funkcijas un to nedaru. Bet nevajag pie šī "likuma" turēties, ja tas apgrūtina strādāšanu. Dažreiz ir pieļaujami izņēmumi. Arī Squad dotajā linkā ir funkcija, kas "dublē" php funkciju. Manuprāt pieļaujama. function isValidFileName($file) { /* don't allow .. and allow any "word" character \ / */ return preg_match('/^(((?:\.)(?!\.))|\w)+$/', $file); } Turpat atrodama arī šada funkcija, kādas veidošanu neatbalstu. function isValidAccountNumber($number) { return is_numeric($number); } Papildinot mounkuls: strip_tags() vajadzētu lietot tikai tur, kur tiešām nepieciešams atbrīvoties no tagiem. Tātad, saglabājot DB lietojam mysql_real_escape_string() un izvadot lietojam htmlentities(). Un nebūs jāuztraucas par ļauniem simboliem. register_globals off - tas ir pareizi un tā vienmēr jābūt! error_reporting(E_ALL); - lai rāda visus kļūdu paziņojumus, arī par nedefinētiem mainīgajiem. Link to comment Share on other sites More sharing options...
Maris-S Posted October 6, 2008 Report Share Posted October 6, 2008 Šai pat forumā labu laiku atpakaļ kāds ieteica grāmatu 'essential php security', ir vērts palasīt, šī grāmata ir veltīta tieši drošības jautājumiem, bez visa liekā. Grāmata jau paveca, bet ir vērtīga ja interesējas par php un drošību, vismaz jau nu iesākumam noteikti derēs. Link to comment Share on other sites More sharing options...
Drupal Posted October 6, 2008 Report Share Posted October 6, 2008 Par tiem dīvainajiem tabulu nosaukumiem - tiešām jēgas nekādas, padomā loģiski - tev db glabājas server pusē, to izmanto tikai php skripts... No klienta puses neviens nevar tikt tavām tabulām klāt, ja vien neesi atstājis caurmu priekš "SQL injection"! To gan pastudē - php security! Nu ir savi pasākumi, kas jāveic drošībai, bet tur jāpalasa tiešām internetā literatūra... Pats no galvas nezinu! :) Tikai jādomā arī loģiski līdzi. Sašifrēt kodus php galā - kāda jēga? Lai sarežģītu dzīvi saviem programmētājiem? Drīzāk drošības pasākums būtu, teiksim pieprasījumus caur GET un POST pārvērst, piemēram, no šāda: "?page=album&content_id=56&editable=false" vai es nez ko tur ... uz "?q=zzKE89xK10O7ertYc4cla9001MmBbNUerQ" - nu jo mazāk info dod gala lietotājam, jo labāk, bet vēl var izmantot user friendli urlus, piemēram /albums/this_years_top_20 - kaut kā tā, tas URL tev pasaka par lapas Contentu, bet neko par skriptēšanas valodu un tai nododamajiem mainīgajiem, jo tā var apstrādāt šo urlu pa savam. Vēl tu vari JavaScript nokodēt ONE WAY (man šķiet, Google ko tādu dara), tā lai neko nesaprot, kas tur rakstīts - izkost jau var, bet tas prasa laiku un baigo urbšanos... Vēl kā jau teica - visus templeitus un server puses skriptus nes ārpus web direktorijas, lai nav iespējams tiem piekļūt tieši caur pieprasījumiem, web direktorijā atstāj index failu, htaccess failu, bildes (images), files (lietotāja uploadotie faili) un css arī vari tur atstāt, respektīvi - lietas, kas ir tieši paredzētas priekš klienta izmantošanai. 100% drošu jau neko nevar padarīt, bet labāk ir 95% drošs, nekā 50%, piemēram! :) Link to comment Share on other sites More sharing options...
Toms Posted October 6, 2008 Report Share Posted October 6, 2008 Vēl par uploadu drošību Secure file upload in PHP web applications by Alla Bezroutchko Link to comment Share on other sites More sharing options...
1mher3 Posted October 7, 2008 Author Report Share Posted October 7, 2008 (edited) paldies par skaidrojumiem. Daudz ko svariigu un jaunu iemaaciijos. ja visu sapratu pareizi, lai _GET izmantotu droshi, vajag http://adrese.lv/index.php?lapa=sakums if ($_GET['lapa']=='sakums') { $lapa = (int)$_GET['lapa']; include ("../faili/sakums.php"); } un prieksh _POST vajag $vards = (int)mysql_real_escape_string(trim(strip_tags($_POST['vards']))); vai, ja tekstaa pielaujami tagi, $koments = (int)mysql_real_escape_string(trim($_POST['koments])); un prieksh izvades $koments = stripslashes(mysql_result(mysql_query("SELECT koments FROM komentari WHERE komentaid='1'"), 0)); vai kautko svariigu neesu palaidis garaam? Edited October 7, 2008 by 1mher3 Link to comment Share on other sites More sharing options...
v3rb0 Posted October 7, 2008 Report Share Posted October 7, 2008 jā, esi palaidis garām par to, kas ir datu tipi, nevajag visu castot uz int. Link to comment Share on other sites More sharing options...
Aleksejs Posted October 7, 2008 Report Share Posted October 7, 2008 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. Š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. Vadoties pēc aplikācijas loģikas, izmantot to vai citu lietotāju darbam ar datubāzi. Link to comment Share on other sites More sharing options...
Recommended Posts