php güvenlik sorusu

4 Cevap php

Uzun bir gün oldu ama ben her ikisini de kullanmak gerekir eğer daha iyi olduğu veya kendi kafamın içinde seçmek için görünmüyor olabilir.

Temelde ne kullanıcı girilen değerleri sterilize etmek kullanmalısınız. Bu htmlentities veya preg_match fonksiyonu da var mı?

Değer bir sql sorgu içine giderse ben o mysql_real_escape_string işlevini kullanın ama ben hazırlanmış deyimi için değiştirene dek sadece o zaman ben bu kaldırabilirsiniz.

Yoksa htmlentitiesi ve preg_match hem de kullanmak iyi bir fikir olurdu?

4 Cevap

Neden sadece previous question Bu sormadı?

Eğer herhangi bir kaçışa yapmadan önce verileri olmasını beklediğiniz beyaz liste karşılayan sağlamak için, preg_match kullanın. Daha sonra, veritabanının sokulması için bir kaçış kullanın. Bu derinlemesine savunma (güvenlik denetimi, yani birden fazla katman, durumda saldırganın ilk katmanını kırabilir) denir.

PHP kullanıyorsanız 5.2 +, verilerinizi sterilize Filtre fonksiyonları içine bakmak gerekir.

http://php.net/manual/en/filter.examples.sanitization.php

Onun daha çok az daha doğrulama kontrolleri ve sanitization rutinleri çok var. Sistem daha fazla ya da daha az güvenli fazlalık ekleyerek gereğidir. Onun bir güvenlik açığı ya da onun değil, onun bir Boole değil Float eter. Ben denetim kodu ve ben gereksiz secuirty önlemleri görünce bir kırmızı bayrak olarak düşünmek ve derin kazmak için beni teşvik eder. Bu programcı paranoyak ve bu her zaman doğru olmasa da belki de onlar açıklarını doğasını anlamıyorum.

Başka bir sorun var. htmlentities () her zaman, örneğin, XSS durmuyor ne çıktı bir <script></script> etiketi veya bu konuda bile bir href içinde ise? mysql_real_escape_string her ne varsa, SQL enjeksiyonu durmuyor: 'select * from user where id='.mysql_real_escape_string($_GET[id]);. Bir preg_match can Bu sorunu çözmek, ancak intval () Bu durumda kullanmak çok daha iyi bir işlevdir.

Ben hazırlanan tabloların çok büyük bir hayranıyım değilim. Ben varsayılan olarak güvenli olduğu için bu mükemmel bir yaklaşım olduğunu düşünüyorum, ama bir hazır deyimi önce mysql_real_escape_string için bir değişken () geçirmeden sadece bozuk veri gidiyor. Ben bu nedenle, çünkü fazlalık bir güvenlik açığını tanıtan tüm doğrulama rutinleri kaldırarak bir acemi düzelt bu sorunu gördük. Neden ve etkisi.

Web Uygulama Firewall (WAF) katmanlar can güvenliğini artırmak nasıl mükemmel bir örnektir. WAF düzenli ifadeler son derece bağlıdır. Onlar büyük resme bakmak ve kötü girişini önlemek için deneyin ya da en azından bunu log. Onlar hiçbir şekilde bir gümüş kurşun ve kullanmak tek güvenlik önlemi olmamalı, ama bazı kişilere dur yapmak ve üretim makinelerde mod_security yükleme öneririz.

Temelde ne kullanıcı girilen değerleri sterilize etmek kullanmalısınız. Bu htmlentities veya preg_match fonksiyonu da var mı?

Kesinlikle htmlentities, muhtemelen ya (güvenlik amaçlı) preg_match değil. Sen onun için gidiyorsun ortama herhangi bir output gösterimini değiştirmek (fora web sayfası, URL için urlencode, bir mysql veritabanı için mysql_real_escape_string .... Htmlentites).

Birisi gerçekten olarak uygulamaya kaydettirmek isterse dummy' UNION SELECT 'dummy' AS user,'dummy' AS password FROM DUAL daha sonra onlara izin!

Saldırılarına karşı izole etmek için kod yazarken önceden saldırının farklı algılamaya çalışırken çok daha fazla etkilidir.

Bazı veri girişi herhangi bir kullanım için belirli bir biçimi maç olabilir - ve verilerin veri yakalama ve kullanımı arasında bir gecikme olabilir - örneğin, durum preg_match uygun olabilir hangi - kullanıcı girişi bir e-posta adresi veya bir tarih isteniyorsa. Ama bu güvenlik ile hiçbir alakası yoktur.

C.