Morphius Posted March 3, 2010 Report Share Posted March 3, 2010 (edited) Tātad vadoties pēc virsraksta...kas ir drošāks saistībā ar SQL injekcijām? Vai arī abas funkcijas vienlīdz labas?! Ja nemaldos šajā forumā lasīju ka visos gadījumos labāk izmanotot mysql_real_escape_string() nekā piemēram addslashes() vai ko tamlīdzīgu. Kā tur īsti ir? Edited March 3, 2010 by Morphius Quote Link to comment Share on other sites More sharing options...
yeahz Posted March 3, 2010 Report Share Posted March 3, 2010 (edited) tās ir divas dažādas funkcijas. htmlspecialchars() lieto datu izvadei, piemēram, lai nebūtu negaidīts script lapā, vai kāds </div> un tml, kas mēdz sačakarēt lapu mysql_real_escape_string() lieto kverijā darbojoties ar datiem Edited March 3, 2010 by yeahz Quote Link to comment Share on other sites More sharing options...
Morphius Posted March 3, 2010 Author Report Share Posted March 3, 2010 (edited) tās ir divas dažādas funkcijas. htmlspecialchars() lieto datu izvadei, piemēram, lai nebūtu negaidīts script lapā, vai kāds </div> un tml, kas mēdz sačakarēt lapu mysql_real_escape_string() lieto kverijā darbojoties ar datiem Man tomēr ir vēlēšanās oponēt... Ja es izmantoju mysql_real_escape_string() funkciju pirms datu ievadīšanas, tad tekstam tiek piemesti sleši pie katrām pēdiņām un kad izmantoju htmlspecialchars($str, ENT_QUOTES) funkciju pie izvades, tad simbols " ' " tiek aizvietots ar "\ 039; " simboliem, respektīvi slešs tāpat paliek un tad jāizmanto vēl funkcija kas novāc slešu. BET, ja izmanto tikai htmlspecialchars($str, ENT_QUOTES) pie datu ievades iekš DB, tad bāzē tiek ievadīti " 039; " simboli un nekādas funkcijas ar slešu pievienošanu vai noņemšanu nav vajadzīgas. Bet jautājums bija par šo funkciju drošu izmantošanu. Vai var izmantot pie datu ievades htmlspecialchars($str, ENT_QUOTES) un tad nevajag satraukties par datu izvadi jo $str ir noformatēts droši?! Vai tomēr labāk izmantot mysql_real_escape_string() un tad pie izvades stripslashes($str)? Edited March 3, 2010 by Morphius Quote Link to comment Share on other sites More sharing options...
2easy Posted March 3, 2010 Report Share Posted March 3, 2010 (edited) pēc mysql_real_escape_string() db nekādi slashi netiek ievadīti. slashi ir redzami tikai kverijā, bet tā kā tas ir escape simbols, tam ir speciālā nozīme. tie nav dati, tāpēc izvadot nekādu stripslashes() nevajag lietot Edited March 3, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
briedis Posted March 3, 2010 Report Share Posted March 3, 2010 Morphius, bet ja gribi ievadīt datubāzē "nesačakarētu", bet drošus datus? :) Tos papildus slešus piemet klāt magic quotes sūds... Quote Link to comment Share on other sites More sharing options...
2easy Posted March 3, 2010 Report Share Posted March 3, 2010 oo briedis arī beidzot uzzīmējās! :)) Quote Link to comment Share on other sites More sharing options...
Morphius Posted March 3, 2010 Author Report Share Posted March 3, 2010 (edited) pēc mysql_real_escape_string() db nekādi slashi netiek ievadīti Nu paga, paga...tie sleši tiek pievienoti un to ka tos slešus pievieno magic_qutes vai kas cits, tad tā jau ir problēma...paskatījos funkciju get_magic_quotes_gpc nozīmi, kura pārbauda vai magic_qutes ir on vai off. Tātad jautājums, vai nav vieglāk izmantot htmlspecialchars($str, ENT_QUOTES) funkciju pirms datu ievades un tad nav lieki jāsatraucas par slešu klātbūtni? vai labāk izmantot get_magic_quotes_gpc kura pārbauda ir ieslēgts vai izslēgts magic_quotes un veikt nepieciešamos mērus?! Un vispār posta fiška ir tāda...kas ir drošāk? Izmantot slešus, vai izmantot simbolu kopumu (& quot;) vai ( 039;) attiecīgi (") un (')? PS Varbūt ir situācijas kad labāk izmantot slešus un situācijas kad labāk izmantot html simboliku? Edited March 3, 2010 by Morphius Quote Link to comment Share on other sites More sharing options...
2easy Posted March 3, 2010 Report Share Posted March 3, 2010 "drošāk" ir psiholoģisks termins programmēšanā runa ir par pareizu datu apstrādi Quote Link to comment Share on other sites More sharing options...
briedis Posted March 3, 2010 Report Share Posted March 3, 2010 Morphius, mysql_rea.. ir tieši domāts lai liekot datus kvērijā, nevarētu veikt sql injekcijas. šī funkcija nemaina datus. htmlspecial.. domāts lai pataisītu datus par ne-html. Dati tiek MAINĪTI. Pamatdoma ir glabāt datus datubāzē tādus, kādi tie ir, un tikai drukājot ārā tos apstrādāt attiecīgi videi - html vai ne-html. Quote Link to comment Share on other sites More sharing options...
2easy Posted March 3, 2010 Report Share Posted March 3, 2010 (edited) ja uz to gribi ietaupīt servera cpu, tad nevis saglabā ar htmlspecialchars(), bet labāk kešo outputu Edited March 3, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
Morphius Posted March 3, 2010 Author Report Share Posted March 3, 2010 Nu tagad bilde ir skaidra Paldies par piedalīšanos :) Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted March 3, 2010 Report Share Posted March 3, 2010 Īsumā: mysql_real_escape - domāts aizsardzībai pret SQL injekcijām - pret sliktām lietām, ko kāds var nodarīt datu bāzei htmlspecialcharacters - domāts aizsardzībai pret XSS/CI utt - pret sliktām lietām, ko var kāds nodarīt klientam pārlūkā Quote Link to comment Share on other sites More sharing options...
2easy Posted March 4, 2010 Report Share Posted March 4, 2010 CI = ? Quote Link to comment Share on other sites More sharing options...
Aleksejs Posted March 4, 2010 Report Share Posted March 4, 2010 CI == Code Injection Quote Link to comment Share on other sites More sharing options...
Kaklz Posted March 4, 2010 Report Share Posted March 4, 2010 Code Injection? Tāpat, kā SQL injection: http://encyclopedia.thefreedictionary.com/Code+injection Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.