DMG Posted April 8, 2007 Report Share Posted April 8, 2007 Labdien! Tātad es tagad mēģinu uztaisīt tā lai manā mājas lappā vis darbotos ar mysql palīdzību, tapēc gribētu pajautāt var būt kāds kas ar to jau ir nodarbojies varēt pastāstīt par kādām izplatītākajām kļūdām un virpār par mysql drošību, lai nevarētu kāds vienkārši uzlaust manu datu bāzi. Pagaidām cik meklēju atradu tikai par funkcijas mysql_real_escape_string() nozīmīgumu, bet gan jau ir vel kkas par ko varēt man pastāstīt nedaudz :) Link to comment Share on other sites More sharing options...
andrisp Posted April 8, 2007 Report Share Posted April 8, 2007 1) Vienmēr filtrē un validē ienākošos datus. 2) Jā, izmanto mysql_real_escape_string. Palasi par SQL injekcijām. Link to comment Share on other sites More sharing options...
DMG Posted April 8, 2007 Author Report Share Posted April 8, 2007 Filtrēt tas būtu ar mysql_real_escape_string vai kā tu to domāj ? :^) Un pag paskaidro lūdzu to datu validēšanu - ko tas īsti nozīmē ? Un vel kāds jautājums - tā mysql_real_escape_string vai tad nav tas pats kas htmlspecialchars() ? Link to comment Share on other sites More sharing options...
ohmygod Posted April 8, 2007 Report Share Posted April 8, 2007 Datu validēšana nozīmē to, ka pārbaudi vai dati, ko praktiski un tīri teorētiski var padot lietotājs - ir ar tādu saturu, kādu esi vēlējies saņemt Tu! Piemēram vai lauks, kurā jāievada daudzums - satur tikai ciparus. Vai emails ir korekts vai login lauks un passworda laukos kāds nav paslēpis kādu injekciju. Ja lieto kūkijus, pārbaudi vai to saturs atbilst tevis rakstītajam - padot jau var sazin ko. e.t.c. Ko pārbaudīt ir vienmēr. Kaut ko aizmirstot vari savu projektu padarīt potenciāli ievainojamu. Var jau gadīties, ka kaut ko nepārbaudot, to nemaz nevar izmantot uzbrukumam, bet var arī gadīties ka var. Link to comment Share on other sites More sharing options...
andrisp Posted April 8, 2007 Report Share Posted April 8, 2007 Filtrēt un validēt nozīmē pārbaudīt vai ienākošie dati atbilst vajadzīgajam formātam. Ja, piemēram, tu veido skriptu, kas dzēšs ierakstu pēc ID, kas vienmēr būs cipars, tad noteikti pārbaudi vai padotā vērtība būs cipars. Es to darītu kaut kā šādi: if(!is_numeric($_POST['id'])) { die(); } $id = (int) $_POST['id']; // Kverijs Palasi manuālī, ko dara htmlspecialchars un ko mysql_real_escape_string. Link to comment Share on other sites More sharing options...
DMG Posted April 8, 2007 Author Report Share Posted April 8, 2007 Es te apskatot google atradu vel tādu funkciju kā sqlesc() tieši prekš MYSQL it kā tikai lieta tāda ka nekur nevaru atrast aprakstu par viņu - var `but kāds zina kur var palasīt kko sīkāk vai arī pats pateikt ko īsti viņa dara ? Link to comment Share on other sites More sharing options...
andrisp Posted April 8, 2007 Report Share Posted April 8, 2007 Nezinu, kas ir sqlesc, bet tā katrā ziņā nav iebūvētā php fja. Kas vainas mysql_real_escape_string ? Link to comment Share on other sites More sharing options...
DMG Posted April 8, 2007 Author Report Share Posted April 8, 2007 Es jau neteicu ka viņam kādas vainas :) Tikai cik saportu šī ar kkādi pasargā no hakeru uzbrukumiem - tikai nevar atrast sīkāku aprakstu un pielietojumu pareizu Link to comment Share on other sites More sharing options...
andrisp Posted April 8, 2007 Report Share Posted April 8, 2007 Nu nez, kā ta viņa pasargā :). Droši vien dara to pašu, ko mysql_real_escape_string - eskeipo "jūtīgos" simbolus. Link to comment Share on other sites More sharing options...
4e4en Posted April 8, 2007 Report Share Posted April 8, 2007 (edited) šitais palīdzēs pret caur URL nodotajām sql injekcijām (varbūt nevisām) if (get_magic_quotes_gpc()) $_SERVER['QUERY_STRING'] = stripslashes($_SERVER['QUERY_STRING']); $query = urldecode($_SERVER['QUERY_STRING']); $rules = array(); $rules[] = "|drop[[:space:]]+database|table|column|i"; $rules[] = "|delete[[:space:]]+from|i"; $rules[] = "|insert[[:space:]]+into|i"; $rules[] = "|update.+set.+=|i"; $rules[] = "|union.+select|i"; $rules[] = "|alter[[:space:]]+table|i"; $rules[] = "|into[[:space:]]+outfile|i"; $rules[] = "|load[[:space:]]+data|i"; $rules[] = "|select.+from|i"; $rules[] = "|left|inner|outer|cross|natural[[:space:]]+join|i"; $rules[] = "|straight_join|i"; foreach($rules as $rule) { if(preg_match($rule, $query)) die(); } Zagts no hackers.lv Edited April 8, 2007 by 4e4en Link to comment Share on other sites More sharing options...
bubu Posted April 8, 2007 Report Share Posted April 8, 2007 Kāda jēga neatļaut kautkādus sql keywordus postēt? Es varbūt komentārā gribu kautko gudru par sql pateikt, a tur die()... Vienkāršāk taču ir noeskeipot pēdiņas, vai lietot mysqli_stmt_bind_param veida fjas. Link to comment Share on other sites More sharing options...
andrisp Posted April 8, 2007 Report Share Posted April 8, 2007 4e4en, šādas metodes reklamēt nevajag. Iekš hackers.lv šis bija nopublicēts tikai kā ieteikums kā varētu mēģināt uzlabot tādu aplikāciju drošību, kas ir pārāk komplicētas (pārāk lielas), lai tām ietu cauri un pārbaudītu vai visur ir noeeskeipoti dati. Link to comment Share on other sites More sharing options...
DMG Posted April 8, 2007 Author Report Share Posted April 8, 2007 Hmm bet tad kas sanāk ka pietiek lietot tikai mysql_real_escape_string lai mans mysql būtu drošs ? Kaut kā īsti neticās :) Link to comment Share on other sites More sharing options...
Recommended Posts