Jump to content
php.lv forumi

Pēdiņas ierakstās atubāzē


retail666

Recommended Posts

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.

Link to comment
Share on other sites

  • Replies 34
  • Created
  • Last Reply

Top Posters In This Topic

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.

Link to comment
Share on other sites

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 by xPtv45z
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by Mr.Key
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...