Kodlama sırasında güvenliği aktif olarak düşünüyor musunuz?


9

Kod yazarken, kodunuzun başlangıçta yapılması amaçlanmayan şekillerde sömürülebileceğini ve böylece korumalı bilgilere erişim sağlayabileceğinizi, komutları çalıştıracağınızı veya kullanıcılarınızın yapmasını istemeyeceğiniz başka bir şeyi aktif olarak kullanabileceğinizi düşünüyor musunuz?


Ne kodlarken? Bir çok farklı şey yapıyorum.
David Thornley

9
Evet, sık sık. Genellikle "kahretsin, vaktim yok, umarım kimse bulamaz" gibi ifadeler.
liori

Yanıtlar:


10

Biraz. Feragatname: Ben bir güvenlik görevlisiyim;)

Yani benim çalışma şeklim, ne tür bir saldırganın muhtemel saldırılarını açıklayan tehdit modelime sahip olduğum. Bu, güvenlik gereksinimlerinin çözülmesine yardımcı olur. Aslında kodladığımda, imleç değişkenlerinin her zaman sınırlar içinde olmasına dikkat ettim, renkli girdiler dezenfekte edildi, hata koşulları ele alındı. Sonra saldırganlar tarafından hangi modüllerin hedefleneceğini görmek için tehdit modelime geri dönüyorum; bazı ekstra inceleme olsun.


4

SQL parametrelerini kullanmak gibi endüstri standardı uygulamalar kullanıyorum. .NET Framework gibi "güvenli" platformlar kullanıyorum ve ASP.NET MVC'deki sahtecilik önleme jetonları gibi güvenlik özelliklerinden yararlanıyorum. Kendi şifreleme algoritmalarımı yazmıyorum, ancak bu şifrelemelerin güvenlik avantajları açısından ne sağladığını ve bu güvenlik avantajlarını elde etmek için ne zaman kullanmam gerektiğini anlıyorum.

Kısacası, en iyi uygulamaları kullanıyorum, ancak kendi güvenlik araçlarını geliştirmiyorum. Ben bu konuda bir güvenlik uzmanı değilim; Muhtemelen bu konular hakkında derinlemesine düşünen ve riskleri ve faydaları net bir şekilde anlayan diğer güvenlik uzmanlarına güveniyorum.

Güvenliğe temel yaklaşımım, sadece güvenlik araçlarını kullanmanın ötesinde, beklediğim dışında sisteme olası tüm girdileri ortadan kaldırmaktır. Bir sosyal güvenlik numarası alanım varsa, gerçekte görünmesi gereken tek karakter, belirli bir düzende sayısal rakamlar ve tire işaretleridir.

Hem istemci hem de sunucudaki kullanıcı girdisini doğrularım.


Dahili güvenlik özelliklerini kullanmaya katılıyorum, ancak elbette bunları ne zaman ve nasıl kullanmanın uygun olduğunu düşünmelisiniz. Ürününüzün güvenliğini düşünmek için başkalarına güvenmekten endişe duyduğumu söylemeliyim. Bunu yapmadılar.
Michael Shaw

@Ptolemy: Bir SQL ifadesini parametrelendirmek uygun olmadığında ? Bir sahtecilikle mücadele jetonu ne zaman uygun değildir ? Veriler hassassa, şifreleme ne zaman uygun değildir ?
Robert Harvey

Şifrelemeyi bir an için düşünelim. İlk soru, hangi şifrelemeyi kullanıyorsunuz? zayıf şifreleme kullanmak yanlış bir güvenlik hissi verir. Bir noktada verilerin şifresini çözmeniz gerekir. Bunu hangi noktada yaparsınız, kodun karmaşıklığına kıyasla bunun için riskler nelerdir. Şifreleme size gerçekte hangi gerçek korumayı sağlıyor? Dll bayt kodunuz şifreli mi veya şifreleme anahtarı DLL'inizden okunabilir mi? bu nedenle, özellikleri çok az veya hiç anlamadan kullanmak tehlikelidir.
Michael Shaw

@Ptolemy: Eğer güvenliği düşünerek kastettiğin buysa, katılıyorum, aslında bu araçları düzgün kullanmak için bunları bilmelisin.
Robert Harvey

3

Kesinlikle.

Güvenlik her şeydir. Ve sayısal yazılımla, bu iki kez gider.
Geçen gün, bir kullanıcı eski programlarımdan birinde hatayı bulmayı ve kullanmayı başardı. Hasar tamir edilemezdi. Aşağıya bakınız:

alternatif metin

Eskiden yuvarlaktı.


7
Bunun daha fazla açıklanması gerekiyor :)
Toby Allen


2

Hayır, çünkü güvenliğin önemli olduğu bir sorun etki alanında çalışmıyorum (büyük veri görselleştirme yazılımı). Ben bunu yanlış kod gibi erken çökmesine ve gözle görülür çökmesine için değil güvenlik sorunları nedeniyle, (vb indeks denetimi, tutarlılık denetimi) benim kod iddia bir grup var, ancak.


1

Kesinlikle. Enjeksiyon güvenlik açıklarını ve ayrıca iş mantığımın bir web ortamında masaüstü ortamında nasıl çalışacağını ve güvenliğin her iki ortamda da nasıl uygulandığını düşünüyorum.


1

Güvenlik uzmanı değilim, ancak web uygulamalarını kodlarken her zaman kullanıcı girişinin her türlü tuhaflığı içerebileceğini ve her zaman tamamen kaçması gerektiğini varsayıyorum. Ayrıca, kullanıcının oturum açıp açmadığını (belirli bir olay için olması gerekiyorsa) ve yapmaya çalıştıkları her şeyi yapma izinlerine sahip olduklarını kontrol etmek için Ajax'ı sunucuya geri çağırırken dikkatli olurum.

Kod temeli, girişler için bir filtre kümesine sahiptir. Ben asla PHP $_GETveya $_POSTdizileri doğrudan kontrol . Bunun yerine, bir fonksiyonu sayesinde bunları sorgulamak Request::get('parameter', 'filter')gibi filtrelerle int, textve birkaç diğerleri. (Ve Request::post()elbette POST girişleri için.)


1

Evet. Çok oyunculu bir oyunda çalıştığımda, hepsi istismar ve hile yapmanın paranoyasıydı. Hile, bir oyunu tamamen yok edebilir, oyun içi eşya satışına bağlı herhangi bir iş modelinden bahsetmez. Bu nedenle güvenlik endişeleri ve kurcalanmaya karşı önlemler çok gündemdeydi. Bunu çok sevdim. Daha önce güvenli olduğundan emin olmak için kod üzerinde daha uzun süre çalışmaktan dolayı kendinizi suçlu hissetmek zorunda kaldığınız başka projelerde çalıştım.


0

Evet. Güvenlik önemlidir ve sonradan düşünülmemelidir; gerçeğin ardından güvenlik eklemek genellikle onu uygulamada tasarlamaktan daha zordur ve daha sonra eklerseniz muhtemelen bazı şeyleri özlersiniz (veya eklemeyi hiç zahmet etmeyin).


0

Güvenliğin genel ilkelerini (bütünlük, kimlik doğrulama, otorite) anlayın ve insanların binlerce yıldır bu güvenlik sütunlarını nasıl alt ettiklerini anlatan birkaç kitap okuyun ve orada yaklaşık yarı yolda olacaksınız.

Daha sonra tasarım ve test stratejileri hakkında birkaç iyi kitap okuyun ve test edilebilirliği mimarinize nasıl tasarlayacağınızı öğreneceksiniz.

Şimdi güvenliği düşündüğüm noktaya geliyoruz. Veri kaynağını nasıl doğrulayabilirim, veri kurcalanmışsa, veri kaynağı kimdir, bunun ne kadar emin olduğumun önemi var mı? nasıl değiştirilmiş olabilir vs ...

Bu tasarımı etkiler. Yapılandırma dosyalarının anahtar bölümleri şifrelenmiş olabilir veya belirli alanlar, ilişkili imza alanıyla birlikte açık metin olabilir. Orada daha büyük bir düşmanlık düzeyi beklemeniz gerektiği gibi şeyler internet bakan hizmetleri ile daha karmaşık olsun.

Sonra testte, tüm bunları nasıl test edersiniz. Maksimum veri girişleriniz nelerdir, yazılımı bu sınırların ötesine iterseniz ne olur? Neye güveniyor? bu güveni nasıl taklit edebilirsin?


0

Evet.

Geçmişte sürekli olarak herhangi bir büyük siteyi tehlikeye atmaya çalıştıklarını bilmek için yeterince bilgisayar korsanıyla uğraştım ve küçük sitelerin bile güvenli olmadığını gösteren yeterince bot var.

Her zaman bir bilgisayar korsanı gibi düşünmeye çalışıyorum , bazen iş arkadaşlarımı her gün verilen sistemlerin nasıl oynanabileceğine dair gündelik yorumlar ile endişelendirdiğim noktaya kadar.


0

Uygulamaya vb. Bağlı olarak herhangi bir geliştiricinin yerden daha büyük veya daha düşük bir dereceye kadar sürece inşa ettiği bir şey olmalıdır. Biliyorum, bu biraz catch-22, çünkü alıcılar en ucuz teklifi isterse, belki de güvenlik içermez)

Bir geliştirici olarak bu alanda yetenekli iseniz kesin bir avantaj elde edebilirsiniz - özellikle bankaları ve finansal hizmetleri düşünüyorum, ancak diğer endüstriler de uygulanabilir. Şu anda, yeni bir mezunun süreç, güvenlik ve bu kuruluşun diğer özelliklerini hızlandırması için eğitimde 70 - 100 bin dolar bütçe ayırabilirler. Onlardan 30 bin kurtarabilirseniz, bu iyi bir CV artı!

Birleşik Krallık'ta, Bilgi Güvenliği Uzmanları Enstitüsü ve İskoçya'da, Güvenlik ve Siber Suç Mükemmeliyet Merkezi, ders materyallerinin gözden geçirilmesine yardımcı olmak, zayıf kodlama ve yaz yerleşimlerini kolaylaştırmak için gerçek dünyadaki etkileri hakkında konuk konferanslar vermek için Üniversitelerle yakın bir şekilde çalışmaktadır (ör. yazılım geliştiricileri yasa uygulamada sahtekarlık bölümlerine yerleştirildi.) Destekleyen kuruluşların çoğu bunu ücretsiz olarak yapıyor, çünkü onlara büyük miktarda para biriktirme potansiyeli var - bana değer gibi geliyor.

(feragat - Çeşitli küresel organizasyonlar için güvenlik görevlisiyim)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.