Böyle damla gibi kötü sözcükleri içinde PHP SQL ifadeleri kontrol etmek veya DELETE

4 Cevap php

Ben bazı yöneticiler manuel (vb istatistik verileri almak için) bir textfield SQL ifadeleri girmek için izin istiyorum. Veritabanı katmanında, ben yalnızca belirli bir kullanıcı oluşturarak verileri korunan ancak güncelleme için değil / silme vb

Böyle DROP, DELETE veya UPDATE gibi kötü sözler için eklenen SQL kontrol ederek ikinci bir güvenlik eklemek istiyorum. Ben preg_match ile bunu nasıl anladım ama ben bir DROP ve benzeri gibi bir şey arasında analitik yöntemlerle ayırt akıllı bir komut dosyası var isterdim WHERE name = 'DROP 1'

EDIT: I would like to log if an admin tries to uses such statements. That's why I need this second level security check. This is for clarification.

Herkes bu örnek uyan snipped bir kod biliyor mu?

Teşekkürler!

4 Cevap

Ben SQL gibi karmaşık bir şey için normal ifadeler kullanmak olmaz.

Daha sonra kullanılan SQL ifadeleri ayrıştırmak ve analiz etmek için onlardan birini kullanın, ayrıştırıcılar PHP için hangi SQL bakarak başlamak istiyorum.

Bunlardan birini deneyin:

http://pear.php.net/package/SQL_Parser

http://sourceforge.net/projects/osqlp/

New Response

Eğer aradığınızı açıklığa kavuşturmak için soru güncellenmiş beri, farklı bir çözüm sunmak istedim. Onlar bir şeyler yapmak için yeterli privs yoksa yine MySQL bir hata geri tükürmek, kullanıcı bir sorgu olarak göndererek ne dert etmeyin.

mysql_error() ile bu hatayı yakalamak, ve ile hata numarası mysql_errno(). Hata mesajı diyorsa "DROP command denied..." veya hata numarası 1142 o zaman onlar yaramaz olmaya çalıştım biliyorum. Eğer haklı olarak onların sorgu meşru kötü sözler olduğunu işaret olarak bu hata içinde terimleri arıyor, onların sorgu terimleri arıyor daha iyidir.

Original Response

Eğer kullanıcı sadece SELECT, sonra da olamaz DROP veya DELETE. Veritabanı açıkça verilen kullanıcı için izin verilmez herhangi bir sorgu reddeder çünkü bu kelimeleri arayan karıştırmak için daha fazla güvenlik katmıyor.

Bu kesinlikle Madem up yani veritabanını ayarlamak ancak o zaman herhangi bir şekilde verileri değiştiremezsiniz SEÇ ayrıcalıklara sahip gibi içeri güvenlik bu düzeyde koymak için yanlış yerdir. Ancak bunları daha sonra SQL deyimlerini anlamsal denetimi miktarı ne olursa güvenlik verecektir verileri değiştirebilirsiniz herhangi bir ayrıcalık vermek edilir.

Neden sadece istatistikler veri için komutları oluşturmak ve yöneticileri bu komutları çağırmak için izin vermez? Bu kolay değil mi?

Yöneticileri kasıtlı zarar yapacağız diyerek ama olabilirdi değil!