Ben MySQL kullanabilirsiniz yoksa ben PHP enjeksiyon dert?

8 Cevap

Ben temelde bir tamsayı değeri n almak ve n. Jpg için bir img etiketi eklemek için bir GET kullanan bir online komik çalıştırmak için basit bir PHP komut dosyası kullanabilirsiniz. Kesinlikle n. Jpg varolduğunu yapma ötesinde kontrol herhangi sanitizasyonunun veya hata yapmaz. Komut ile sadece kullanıcı etkileşimi bu GET yoluyla ve başka bu el test için farklı bir şablon görüntülemek için bir dize ile aynı şeyi yapar.

Benim sorum, ben bile enjeksiyon endişesi olmalı mı? Ve eğer öyleyse, bunu önlemek için ne yapmalıyım? Ben şimdiye kadar bulduğum her şey, sadece bu durumda geçerli değildir MySQL enjeksiyon ile ilgilidir.

8 Cevap

Eğer bir veritabanı kullanarak değilseniz, o zaman tabii ki SQL enjeksiyon dosyanız için bir endişe değildir. Eğer diğer kullanıcılara görüntülemek için herhangi bir kullanıcı tarafından gönderilen verileri saklamak istemezseniz, Cross-site-scripting bir endişe değil. İşte eval() veya bir saldırganın yıkmak olabilir dış süreçler, koşma gibi şeyler bırakır, ama sen de böyle bir şey yapmak gibi gelmiyor.

Yani muhtemelen güvendesin. Yine de, bu sadece alışkanlık haline almak için, hata denetimi minimum miktarda olması iyi olurdu. Örneğin, size bir tamsayı GET parametresi olduğunu söylüyorlar. Böyle bir şey yok - tüm HTTP parametreleri implicity dizeleri vardır. PHP ayrımı bulanıklaştırır, ama kesinlikle bir XSS, SQL enjeksiyonu veya eval açıktan (hatta yok da eğer mevcut ise) yararlanmak amacıyla bazı dize değil emin olmak için açıkça int için döküm gerekir.

Her zaman güvenlik konusunda endişe gerekir. Her bir güvenlik açığı mysql :-) yanlış kullanımı ile oluşur Değil

Siteniz için bir veritabanı kullanmıyorsanız, çünkü SQL injection durumda da geçerli değildir. Ama sizin sitenize de bu tür cross site scripting gibi diğer güvenlik konuları dikkate almalıdır.

Get You bir değişken kullanıyorsanız, url aşağıda düşünün:

 index.php?myvar=<script>alert(document.cookie);</script>

Hacker vb bir dizi yolu hex, utf içinde url yukarıdaki sağlayabiliyoruz

Bir kötü adam XSS saldırıları gerçekleştirmek için GET değişkenleri değiştirebilirsiniz. XSS birçok güvenlik açıkları köküdür. Bunu da dikkate almak gerekir.

Eğer GET var bir sayısal tür bekliyoruz sonra aşağıdaki kodu göz önünde bulundurun:

$myvar = (int) $_GET['your_var'];

Sen XSS saldırıları önlemek için htmlentities işlevini kullanmanız gerekir.

Olsun sadece bir tamsayı kullanımını içermesi gerekiyordu ise

$n = intval($_GET['n'])

Eğer bir numara bekliyorsanız, kötü girdileri bunu inkar etmiyorum.

if ( !ctype_digit($user_input) ) {
    header('Location: error.php'); // or whatever page
    exit;
}

Eğer insanlar gibi istekleri ile dosya sunucusu gezen istemiyorum gibi ben de istekleri, çok istediğiniz görüntüleri dizini vurursun example.com/?q=../../.htaccess

Ben bu çıkışı nasıl etkileyeceğini emin değilim, ama iyi olamaz.

Allways zararlı içerik için kullanıcı girişi ve $ _GET ve $ _POST verilerini kontrol. Addslashes, ereg_match ve intval arkadaşınız vardır ...

Onunla uzak alabilirsiniz varsa, set

allow_url_fopen = Off

php.ini yönergesini

You don't have to worry about SQL injection. But you should check your input as it is used in the html you generate. Imagine I give this link http://www.example.com/viewComic.php?id="/><script type="text/javascript>alert("XSS");</script><img src="22 to someone. This person will have a little pop-up coming from your website. And a lot of bad things can be done with javascript. For more infos, you can start reading the wikipedia page about XSS.

Yani, size beklediğiniz numarası bir sayı olup olmadığını kontrol etmelisiniz. Örneğin için is_numeric.