daviskrex Posted August 13, 2007 Report Posted August 13, 2007 Esmu dzirdējis, ka visas sql injekcijas veic email laukos, bet es nevaru izdomāt kādu aizsardzību uzliek, jo būtu žēl, ja kāds uzlauž manu lapeli.
andrisp Posted August 13, 2007 Report Posted August 13, 2007 (edited) hackerman, htmlspecialchars dara pavisam ko citu. Tā pasargā (lielākoties) no XSS (visādu sliktumu injecēšanu iekš HTML) nevis no SQL injekcijām. Tam ir mysql_real_escape_string vai citām DBVS kaut kas analogs. Edited August 13, 2007 by andrisp
hackerman Posted August 13, 2007 Report Posted August 13, 2007 andrisp, $email = htmlspecialchars($_POST['email'], ENT_QUOTES); - iestūķē injekciju.
hackerman Posted August 13, 2007 Report Posted August 13, 2007 hackerman, htmlspecialchars dara pavisam ko citu. Tā pasargā (lielākoties) no XSS (visādu sliktumu injecēšanu iekš HTML) nevis no SQL injekcijām. Nu pieņemsim ir input lauks, post dati tiek ievietoti datubazē, rezultāts izprintēts. Post dati tiek filtrēti ar htmlspecialchars(); ( $email = htmlspecialchars($_POST['email'], ENT_QUOTES); ) Tu teici, ka htmlscpecialchars neaizsargā no injekcijām... Tad jau tev nesagādās uztaisīt sql injekciju ?
andrisp Posted August 13, 2007 Report Posted August 13, 2007 Sapratu, ko tu gribēji man pateikt, bet nu šāds risinājums ir galīgi garām (un pavisam noteikti nav 100% drošs. Īpaši SQL injekcijas nepārzinu, bet esmu pārliecināts, ka pastāv injekciju veidi bez ' un "). Garām tāpēc, ka htmlspecialchars pirmkārt un galvenokārt nav paredzēta šādam nolūkam. Tam ir speciālas funkcijas, kas eskeipo netikai ' un ", bet arī citus jūtīgos simbolus. Kā arī - ja man vajadzēs šos datus neeskeipotus ? Katru reizi vajadzēs izmantot htmlspecialchars_decode() vai ko tamlīdzīgu ? Nerullē.
hackerman Posted August 13, 2007 Report Posted August 13, 2007 Es arī nēesmu eksperts sql injekcijās, bet kautko zinu... Piemēram login loga injekcijas piemēri: ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a itkā visos bija pēdiņa(s). Nēesmu nekad taisījis drop table injekcijas. Reku piemērs: SELECT email, passwd, login_id, full_name FROM members WHERE email = 'x'; DROP TABLE members; --'; -- Boom! Atkal itkā ir pēdiņas :) Nu okei, nestrīdēšos tev pretīm, ticēšu, ka drošāk ir ar mysql_real_escape_string :) Par vajadzību pēc eskeipotiem/neeskeipotiem datiem - skatoties, ko vajag :) Nedomāju, ka emaila adresē būtu jāmētājas neeskeipotām pēdiņām, bet citur, kautkur komentāros, rakstos etc., eskeipošana pat traucētu... :)
andrisp Posted August 13, 2007 Report Posted August 13, 2007 emaila adresē būtu jāmētājas neeskeipotām pēdiņām Email adrese vispār būtu jāvalidē, ka ' " un nav iespējami ;) kautkur komentāros, rakstos etc., eskeipošana pat traucētu... :) Kādā ziņā traucētu ? Un atkal par tām pēdiņām - protams, ka lielākā daļa injekciju izmanto tās, bet tev neliekas loģiski, ka, piem., fjai mysql_real_escape_string() dokumentācijā ir rakstīts, ka tā eskeipo \x00, \n, \r, \, ', " un \x1a, un, ka tas nozīmē, ka īpašos apstākļos varbūt ir iespējams SQL injekcijas (vai arī vienkārši sačakarēt kveriju), izmantojot kādu no tiem pārējiem simboliem ?
tmpjail Posted August 13, 2007 Report Posted August 13, 2007 damn, pie insertoshanas db - mysql_real_escape_string, pie outputoshanas - vismaz stripslashes un htmlspecialchars protams, magic quotes meedz maisiit
Recommended Posts