Ne zaman mysql_real_escape_string kullanmak için en çok tavsiye edilen zamanlar ()

7 Cevap php

Im aslında .. bu fonksiyonu kullanarak ve preg_replace ve onu bulmak için önceki addslashes kullanıyordum yeni.

Hakkında Im geçmesi ve benim ilk büyük app gönderme alanlarında güvenlik sıkın ve bu fonksiyon etkili ve tavsiye iyi örneklerini bilmek istedim çünkü ben, çoğunlukla merak ediyorum. Ben, bu fonksiyon bir kaç farklı durumlarda uygulanacak ve kullanıcı girişi yayınlanmıştır değil hemen önce gördüm .. ama sorgular genel bittiğinde tam olanakları ve nasıl tam etkinliği için uygulamak gerçekten merak Im.

Ayrıca, genel olarak herhangi bir yanılmaz güvenlik yöntemleri ve önerileri gerçekten takdir edilecektir.

Cheers tüm!

7 Cevap

Parameterized queries (ya aracılığıyla PDO veya mysqli) SQL enjeksiyonu önlemek için doğru yoldur çünkü İdeal never, bunu kullanarak olmalıdır.

Eğer veritabanına veri koyarak zaman: çok önerilen kez mysql_real_escape_string () kullanın. Eğer sorunlara karşı savunmak ve filtre var bir düşman saldırısı gibi her yerde (bir web sayfasından, veritabanından gelen, bir webcoder gelen) gelen girişi tedavi, o zaman çok yanlış olmaz

Zor yolu ilk birkaç kez yapın, sonra kendiniz için daha kolay hale getirmek için, Zend_Db'nin gibi bir çerçeve (I ZendFramework kullanın), ya da en azından bir bölümünü kullanabilirsiniz.

Şaşmaz bir güvenlik yöntemi için - kırık edilemez bir sunucu:

  1. ağ makineyi ayırın
  2. güç makineyi ayırın
  3. güvenli içine makine koymak
  4. Marianas siper içine bırakın
  5. Bir nöbetçi koy.

Not: yararlılığı bu noktada garanti edilmez. olsa çok güvenli. % 100 değil, ama şey, elde kadar iyi.

Ve güvenlik ve en iyi uygulamalar hakkında öğrenme tutmak.

Muhtemelen ilişkili parametrelerin yerine ile mysqli_real_escape_string veya PDO kullanmalısınız. Bunlardan herhangi biri için ana kullanım, tek ve çift tırnak gibi karakterler kaçmak. Bu durumu önlemek için genel olarak SQL injection.

Bir süre önce benzer bir soruya bu yanıtı bakın.

Temelde, sadece SQL Enjeksiyon saldırılarını engellemekten daha güvenlik için çok daha fazlası var. Ayrıca, her zaman SQL enjeksiyon bir tehlikesi vardır dinamik veri her türlü içeren veritabanına karşı bir sorguyu çalıştırın. Mysql_real_escape_string () kullanmak daha Son olarak, PDO kütüphanesi ile hazırlanan deyimleri kullanmak daha iyidir.

1) http://stackoverflow.com/questions/585358/security-of-striptags-and-mysqlirealescapestring/585568#585568

mysql_real_escape_string(magic_quotes_gpc() ? strip_slashes($variable) : $variable)

O zaman her zaman, mysqli veya PDO kullanarak değil ısrar ederse.

Hemen hemen her zaman orada veri karakterleri olabileceğini karışabilirdi bir sorgu, en önemlisi alıntı ve tek tırnak. Yerine addslashes MySQL de birini () kullanmak istiyorum neden olan, çok yapabileceğini mevcut MySQL karakter kodlama bağımlı olan bazı genişletilmiş karakterler vardır.

Iyi şey veri olarak değil, kod (kod çalıştırmasına asla) gibi içeriği ayrıştırmak için. Örneğin, JSON (JavaScript), bir istemci bir sunucudan veri montajı çok kolay bir yoldur, ama bunu çalıştırmak asla. Bunu doğru ve sadece verileri içeren onaylamak için Düzenli İfade ile verileri ayrıştırmak gerekir.

O dedi, SQL enjeksiyonu genellikle html form verilerini kabul olmuyor. Anahtar bir soruna neden SQL ayrılmış bir deyişle, yani 'kontrol etmek olacaktır; (Tek tırnak, noktalı virgül.) Kolayca ayrılmış kelimelerin bir listesini oluşturmak ve RegEx ifade ile onları çalıştırabilir (jQuery muhtemelen güzel veya C # sunucu üzerinde bir şey vardır.) PHP de bunu kolayca yapabilir eminim. CRUD (güncelleştirmeyi almak ve oluşturmak silmek) fiiller aramak için güzel, ama şimdiden bir şeyler yapmak için var ya da daha kötüsü sql ifadeleri (dinamik sql) yürütmek sunucu tarafında SQL saklanan prosedürleri hakkında unutmayın. Siz de bir web sayfası dışında onları kullanmak gerekmez eğer kodlamak "kaçış" karakterleri url olabilir.