PHP, SQL enjeksiyonu kendini korumak?

4 Cevap php

Benim localhost PHP sunucusuna bir giriş alanından ");-- gönderdiğinizde, bu OTOMATİK dönüştürür

\ "), -

It seems great, except that I don't know how trustworthy this behavior is. Although it seems to avoid SQL injections, my development environment is not the same as the production environment and I'm afraid that the production environment may not have this sort of protection automatically activated...

Neden PHP yapar (kullanmak zorunda kalmadan giriş dönüştürmek mysql_real_escape_string)? Yok O always bunu da sadece belirli uzantılara sahip mi? SQL enjeksiyonu önlemek için bu davranışa güvenmek güvenli mi?

4 Cevap

Bu Magic Quotes etkin gibi görünüyor. Ama sen daha iyi bu seçeneği devre dışı bırakmak veya onları geri. mysql_real_escape_string daha güvenlidir.

PHP bu "özelliği" "sihirli tırnak" olarak bilinir. Onlar yanlış bir güvenlik duygusu vermek biraz daha fazla gibi onlar olabilir 'sihirli' olarak, bu, bunları kullanmak için son derece kötü bir uygulamadır. Neyse ki onlar (geliştirme) PHP 6 kaldırıldı.

Eleştirilerin daha ayrıntılı bir liste, bu Wikipedia article bulunabilir.

PHP kılavuzu disable magic quotes için çeşitli yolları anlatılmaktadır.

Sen Zend_Db gibi bir soyutlama katmanı kullanarak veritabanına konuşurken içine almak isteyebilirsiniz. Bir Zend_Db_Select başlatmasını tarafından bir deyim oluşturmak Örneğin, bu gibi görünecektir:

//$_GET['thing'] is automatically escaped 
$select = $zdb->select()->from('things')->where('name = ?',$_GET['thing']);
$result = $zdb->fetchRow($select->__toString());//__toString generates a really pretty, vendor independent query

//a plain vanilla query would look like this:
$result = $zdb->fetchRow('select * from things where name = ?', $zdb->quote($_GET['thing']);

Siz Sihirli Tırnaklar üzerinde döndü. PHP grup resmen şiddetle bu işlevi kalktı ve güçlü güvenerek etmemektedir. Zamanında sihirli tırnak devre dışı yolları her zaman hava sizi komut .htaccess veya ini_set() kullanmak, işe yaramaz. Stripslashes her zaman aradığını da oldukça dağınık olabilir.

Daha fazla bilgi: http://ca3.php.net/magic_quotes