retail666 Posted October 8, 2012 Report Share Posted October 8, 2012 Izmantoju htmlentities, lai neļautu savā datubāze ierakstīt html vai php vai javasscript kodu u.t.t., bet izskatās, ka ēl tā man rakstot tekstu forās u postojot uz atubāzi neļauj izmantot ' (single pēiņas), bet jāizmanto ubultās ". Kā to labot? Kas pie tā ir vainīgs? Rāda: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'texts' Esmu nūbs, palīziet, paldies. Quote Link to comment Share on other sites More sharing options...
waplet Posted October 8, 2012 Report Share Posted October 8, 2012 mysql_real_escape_string ... Quote Link to comment Share on other sites More sharing options...
aaxc Posted October 9, 2012 Report Share Posted October 9, 2012 waplet, to fīču īsti vairs neizmanto: http://lv.php.net/manual/en/function.mysql-real-escape-string.php Ja tev ir problēmas ar pēdiņām, var arī prosta addslashes izmantot. Quote Link to comment Share on other sites More sharing options...
marcis Posted October 9, 2012 Report Share Posted October 9, 2012 addslashes() te nebūs pareizi izmantot, jo tas gluži vienkārši paredzēts citiem mērķiem un neeskeipo visu, kas būtu jāeskeipo kverijā. php.net iesaka mysql ekstensiju kā tādu turpmāk nelietot, nevis kādu konkrētu funkciju. mysql_real_escape_string() būs vienīgais pareizais risinājums, ja tiek izmantotas mysql_* funkcijas. Quote Link to comment Share on other sites More sharing options...
aaxc Posted October 9, 2012 Report Share Posted October 9, 2012 Tauta, aizmirstam par mysql_real_escape_string lietošanu kā tādu lūdzu. Tas nav risinājums vairs, tas ir tikai workarounds. Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted October 9, 2012 Report Share Posted October 9, 2012 (edited) Ko? Šis tad arī gribi teikt ir tikai workarounds? http://lv.php.net/ma...cape-string.php Tāpat arī šis http://lv.php.net/ma...n/pdo.quote.php Tāpat arī, no http://lv.php.net/manual/en/function.mysql-real-escape-string.php - "This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.", tāpat "If this function is not used to escape data, the query is vulnerable to SQL Injection Attacks." Es drīzāk teiktu, ka addslashes ir workarounds, jo mysql_real_escape_string eskeipo daudz vairāk čaru nekā addslashes. addslashes ir paliekas no vecajām php versijām. addslashes == magic_quotes_gpc, kur otrais jau ne tikai ir deprecated, bet jau iekš 5.4 removed. Edited October 9, 2012 by xPtv45z Quote Link to comment Share on other sites More sharing options...
codez Posted October 9, 2012 Report Share Posted October 9, 2012 Tauta, aizmirstam par mysql_real_escape_string lietošanu kā tādu lūdzu. Tas nav risinājums vairs, tas ir tikai workarounds. Ko tu pīpē? Quote Link to comment Share on other sites More sharing options...
aaxc Posted October 9, 2012 Report Share Posted October 9, 2012 Cik tie posti ir veci? Nav jēgas izmantot mysql_real_escape_string šobrīd vairs. Vainu izmanto ko elementāru, vai, ja ir nepieciešams jau drošāks veids, tad pārejam uz PDO lietošanu, nevis spītīgi turamies pie veciem standartiem. Quote Link to comment Share on other sites More sharing options...
blackhalt Posted October 9, 2012 Report Share Posted October 9, 2012 Par pēdiņām. Ar str_replace pārveido ' par ' Vēl ir tāda funkcija: http://lv.php.net/manual/en/function.htmlspecialchars.php Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted October 9, 2012 Report Share Posted October 9, 2012 Man liekas, tu kaut ko jauc. :) mysql vs mysqli vai PDO tā jau ir cita tēma. Bet ja lieto mysql_*, tad eskeipošanai ir jālieto mysql_real_escape_string. Tas nav nekāds standarts, tā ir eskeipošans funkcija, tāda pati kā priekš mysqli - mysqli_escape_real_string un tāda pati kā PDO::quote priekš PDO. Quote Link to comment Share on other sites More sharing options...
codez Posted October 9, 2012 Report Share Posted October 9, 2012 (edited) aaxc, par mysql funkcijām labāk ir izmantot mysqli, bet ideja paliek tā pati, ka izmanto real escape funkciju un tas nav nekāds vecs (novecojis) standarts. Pamēģini PDO uzrakstīt šādu kveriju, bet tā, lai būtu "droši", izmantojot prepared statments: SELECT * FROM users WHERE id IN (2,5,9,10,12,19) kur id vērtībās tiek padotas kā masīvs. Pamēģini PDO uzrakstīt kveriju, kurā ir mainīgi tabulu nosaukumi. Pamēģini PDO uzrakstīt kveriju, kurā ir mainīgi pieprasītie lauki. Bez tam, ja izmanto prepared statements, tad tipiska web aplikācija būs lēnāka, jo prepared statements kveriju izpilda divos posmos, bet tākā konekcija web aplikācijās uz db tiek zaudēta pēc katra requesta, tad nekāda labuma no statement-u prepar-ošanas nav, tikai lieka slodze. Pie tam ņemot vērā, ka tipiskai web aplikācijai bootlenecks ir parasti ir tieši db, šī ir pirmā vieta, kura ir jāoptimizē un šijā ziņā mysqli ir ātrāks. Bez tam, ja pa tiešām ir vieta, kur vajadzīgs izmantot prepared statments, tad arī mysqli tādi ir. Edited October 9, 2012 by codez Quote Link to comment Share on other sites More sharing options...
F3llony Posted October 9, 2012 Report Share Posted October 9, 2012 Cik tie posti ir veci? Nav jēgas izmantot mysql_real_escape_string šobrīd vairs. Vainu izmanto ko elementāru, vai, ja ir nepieciešams jau drošāks veids, tad pārejam uz PDO lietošanu, nevis spītīgi turamies pie veciem standartiem. Tobisj, ja viņam skripti sarakstīti uz mysql* un viņš nevar/nevēlas pāriet uz mysqli/pdo/odbc, viņam vajadzētu atmest real_escape_string un lietot addslashes? Es pareizi saprotu? Nu nevajag tev programmēt, goda vārds. Nevajag. Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted October 9, 2012 Report Share Posted October 9, 2012 (edited) Viena no pazīmēm, ka web programmētājs nesaprot, ko dara, ir nemācēšana saglabāt pēdiņas datubāzē. Kuriozākos gadījumos tās pat tiek aizvietotas ar HTML entītiju. Un tad nu pamēģini atrast ierakstos ""a" > "b"" utml. tekstus. Otra lieta, kas mulsina - nemācēšana atšķirt, ka teksti ar XSS, JS un HTML simboliem nekādā veidā neapdraud pašu datubāzi. Trešā lieta - "programmētājiem" izprast, kas ir abstrakcija un PDO, tas jau ir tik sarežģīts temats, ka labāk par to laikam vispār nerunāt. Tauta, aizmirstam par mysql_real_escape_string lietošanu kā tādu lūdzu. Tas nav risinājums vairs, tas ir tikai workarounds. Pieļauju, ka gribēji teikt kaut ko citu, nevis to, ko šeit var saprast. Citādi jāpiekrīt kolēģu teiktajam par profesijas izvēli. Edited October 9, 2012 by Mr.Key Quote Link to comment Share on other sites More sharing options...
blackhalt Posted October 9, 2012 Report Share Posted October 9, 2012 Mr.Key, skatoties kādas pēdiņas. Piemēram, html tekstā, virsrakstos neizmantosi ', ", <, > un kas tur vēl. Teksti ar XSS apdraud lietotāja kontu. Quote Link to comment Share on other sites More sharing options...
marrtins Posted October 9, 2012 Report Share Posted October 9, 2012 Nav jēgas izmantot mysql_real_escape_string šobrīd vairs. LOL? 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.