Sabit Değerlerden Kurtulmak

Sabit Kodlanmış Değerlerden Kurtulmak: Modern Yazılımlar İçin Daha Akıllı Stratejiler

Sabit kodlanmış değerler kısayollar gibi görünür. Bir geliştirici veritabanı URL'sine ihtiyaç duyar, bunu doğrudan bağlantı dizesine yazar ve devam eder. Üç ay sonra URL değişir, değişiklik bir dosyada yapılır ancak diğer dört dosyada gözden kaçar ve üretim gece 2'de bozulur. Bir geliştirici API anahtarına ihtiyaç duyar, bunu kaynak dosyasına yazar, commit eder ve push eder. Altı ay sonra depo klonlanır, anahtar herkese açık bir çatalda görünür ve kimse fark etmeden hesap tehlikeye girer. Bunlar uç durumlar değildir. Bunlar yazılım sistemlerinde sabit kodlanmış değerlerin standart gidişatıdır: zararsız görünen kısayollar, bakım borcuna, güvenlik olaylarına ve dağıtım hatalarına yol açar.

Sabit kodlanmış değerleri bul ve sil

Sabit Kodlama Değerlerini Ortadan Kaldırın ve Kurtulun

Daha fazla bilgi edin

Çözüm karmaşık değil. Ortam değişkenleri, yapılandırma dosyaları, bağımlılık enjeksiyonu ve merkezi sabitler, her büyük dil ve çerçevede bulunan, iyi bilinen kalıplardır. Zorluk, bunları mevcut kod tabanlarına sistematik olarak uygulamak, yeni kodlar için zorunlu kılmak ve üretime ulaşmadan önce yakalamak için disiplin oluşturmaktır. Bunu yapmak için gereken her teknik, Python, Java ve JavaScript için çalışan kod örnekleriyle birlikte aşağıda ele alınmıştır.

Sabit kodlanmış değer nedir?

Sabit kodlanmış değer, yapılandırma, ortam değişkenleri, veritabanı veya çalışma zamanı girdisi yoluyla sağlanmak yerine doğrudan kaynak koduna yerleştirilmiş değişmez bir sabittir. Tanımlayıcı özelliği dolaylılığın olmamasıdır: Değeri değiştirmek kaynak kodunu değiştirmeyi, yeniden derlemeyi veya uygulamayı yeniden dağıtmayı gerektiriyorsa, bu değer sabit kodlanmıştır.

Yaygın örnekler:

  • Veritabanı bağlantı dizesi, doğrudan bir yapılandırma sınıfına yazılır.
  • Kaynak dosyasındaki bir API anahtarı veya erişim belirteci
  • Belirli bir ortama işaret eden bir hizmet URL'si.
  • Sayısal bir eşik (if (amount > 5000)(açıklama veya harici kaynak olmaksızın)
  • Belirli bir sunucu düzenini varsayan dosya yolu
  • Kullanıcı rolü dizesi ("admin") yetkilendirme kontrollerine dağılmış durumda

Sabit kodlanmış değerler her dilde ve her kod tabanında bulunur. Eski ana bilgisayar uygulamaları, ortama özgü veri kümesi adlarını, bölge kodlarını ve iş eşiklerini doğrudan COBOL programlarına kodlar. Modern mikro hizmetler, sabit kodlanmış zaman aşımı değerlerini, yeniden deneme sayılarını ve hizmet keşif URL'lerini uygulama sınıflarında biriktirir. Biçim dile göre değişir; sorun aynıdır.

Sabit Değerler ve Kod İçindeki Değerler Arasındaki Fark Nedir?

Sabit değerler sıklıkla sabitlerle karıştırılır, ancak bu ayrım önemlidir. Sabit, tanımı gereği doğru olan ve değişmesi muhtemel olmayan, istikrarlı, kasıtlı, alan düzeyinde bir gerçeği temsil eder: Math.PI, HTTP_STATUS_OK = 200, MAX_RETRY_ATTEMPTS = 3 (Üç sayısı gerçekten tüm bağlamlar için doğruysa). Sabitler kodda uygundur. Açıklık sağlarlar, yazım hatalarını önlerler ve amacı açıkça belirtirler.

Sabit kodlanmış bir değer, dağıtım bağlamı, altyapı veya iş kuralları hakkında değişkenlik göstermesi beklenen bir varsayımı kodlar. Üretim veritabanı URL'si, API anahtarı, bölgeye özgü vergi oranı, özellik bayrağı durumu: bunlar sabit gibi görünen sabit kodlanmış değerlerdir. Test basittir: eğer değerin farklı bir ortamda, müşteride veya sürümde farklı olması gerekiyorsa, bu bir sabit değildir ve kaynak kodda yer almamalıdır.

Yumuşak Kodlama Nedir?

Yumuşak kodlama, değerlerin derleme zamanında sabitlenmesi yerine çalışma zamanında yapılandırılabilir hale getirilmesi uygulamasıdır. Yumuşak kodlanmış bir değer, kaynak kodunu değiştirmeden veya uygulamayı yeniden dağıtmadan bir yapılandırma dosyası, ortam değişkeni, veritabanı girişi veya yönetim arayüzü aracılığıyla değiştirilebilir. Yumuşak kodlama, ortama özgü ayarlar, iş parametreleri, özellik bayrakları ve geliştirme, test ve üretim ortamları arasında farklılık göstermesi gerekebilecek herhangi bir değer için doğru yaklaşımdır.

Kodlamada sabit kod kullanımı ile esnek kod kullanımı arasındaki fark, vergi oranını güncellemek için kod değişikliği ve dağıtım gerektiren bir sistem ile operasyon ekibi üyesinin bunu bir yapılandırma dosyasında güncelleyip hizmeti yeniden başlatmasına olanak tanıyan bir sistem arasındaki farktır. Büyük ölçekte, bu fark binlerce mühendis saatini ve önemli operasyonel riski temsil eder.

Kod içine sabit kod yazmanın neden kötü bir uygulama olduğu

Bakım kolaylığını yok eder.

Sabit kodlanmış değerler çoğalır. Bir dosyada sabit kodlanmış bir servis URL'si, modül yeni bir entegrasyon için kopyalandığında beş dosyada sabit kodlanmış hale gelir. Bir hesaplamada görünen sihirli bir sayı, aynı mantık biraz farklı bağlamlarda tekrarlandığında üç hesaplamada görünür. Her bir örnek ayrı bir bakım yükümlülüğüdür: bulun, güncelleyin, güncellemeyi test edin ve hiçbir örneğin atlanmamış olmasını umun.

Bakım kolaylığı sorunu sadece çaba ile ilgili değil, aynı zamanda riskle de ilgili. Sabit kodlanmış bir değeri güncellemek için kod tabanında arama ve değiştirme işlemi, üretim üzerinde etkisi olan bir yeniden düzenleme işlemidir. Eksik kalan her örnek bir hatadır. Yanlış yapılan her değiştirme de bir hatadır. Değişikliğin tamamlandığından emin olmanın tek yolu, herhangi bir örnek kalırsa başarısız olacak otomatik testlere sahip olmaktır, ancak otomatik testler tam olarak sabit kodlanmış değerlerin yazılmasını zorlaştırdığı şeydir.

Testleri ve Sürekli Entegrasyon/Sürekli Dağıtımı Engelliyor

Otomatik testlerin kontrollü ortamlarda çalıştırılması gerekir. Bağlantı dizesi sabit kodlanmış olduğu için üretim veritabanına bağlanan bir test, test değil; derleme sırasında çalışan bir üretim işlemidir. Sabit kodlanmış bir servis URL'sinin derleme sunucusundan erişilememesi nedeniyle bozulan bir CI işlem hattı, test altyapısı sorunu değil; sabit kodlama sorunudur.

Ortam değişkenleri ve yapılandırma enjeksiyonu, aynı test paketinin farklı destek hizmetlerine sahip yerel geliştirme, CI, hazırlık ve üretim ortamlarında çalıştırılabilir olmasını sağlayan unsurlardır. Bunlar olmadan testler ortama özgü, istikrarsız hale gelir ve sonunda terk edilir.

Bu durum ciddi güvenlik açıklarına yol açar.

Sabit kodlanmış kimlik bilgileri, yazılım güvenliğinde en yaygın ve en çok istismar edilen güvenlik açığı kategorilerinden biridir. Sürüm kontrolüne kaydedilen sabit kodlanmış bir API anahtarı, veritabanı şifresi veya erişim belirteci, mevcut daldan silindikten sonra bile deponun geçmişinde kalır. Otomatik tarayıcılar, bu kalıpları sürekli olarak genel depolarda arar. On sekiz ay öncesine ait bir commit'te bulunan bir anahtar, hiç döndürülmediyse hala geçerlidir.

OWASP, sabit kodlanmış parolaları açıkça kritik bir güvenlik açığı olarak tanımlar (CWE-259, CWE-798). NIST yönergeleri, kimlik bilgilerinin asla kaynak kodda saklanmaması gerektiğini şart koşar. Buna rağmen, sabit kodlanmış değerler aracılığıyla kimlik bilgilerinin sızması, bulut güvenliği olaylarının en sık görülen nedenlerinden biri olmaya devam etmektedir.

Risk, kimlik bilgilerinin ötesine uzanıyor. Sabit kodlanmış dahili hizmet URL'leri altyapı topolojisini ortaya çıkarıyor. Sabit kodlanmış kullanıcı rolü dizeleri yetkilendirme mantığını açığa çıkarıyor. Sabit kodlanmış doğrulama eşikleri, bir saldırgan tam değerlerini bildiğinde atlatılabilir. Bunların hiçbiri güvenlik riski olarak hemen göze çarpmıyor, bu yüzden de ele alınmadan birikiyorlar.

Sabit Kodlanmış Kimlik Bilgileri ve API Anahtarları: En Yüksek Riskli Kategori

Sabit kodlanmış gizli bilgiler, yanlış yazılmasının sonuçları diğer sabit kodlanmış sorunlardan temelde farklı olduğu için ayrı bir incelemeyi hak ediyor. Sabit kodlanmış bir zaman aşımı değeri hataya neden olur. Sabit kodlanmış bir API anahtarı güvenlik açığına neden olur.

Sabit kodlanmış kimlik bilgilerinin görünümü nasıl olur?

piton

# Python -- hardcoded database credentials (never do this)
connection = psycopg2.connect(
    host="prod-db.internal.example.com",
    database="accounts",
    user="app_service",
    password="s3cr3tP@ssword!"   # hardcoded secret in source code
)

# Python -- correct approach: load from environment
import os
connection = psycopg2.connect(
    host=os.environ["DB_HOST"],
    database=os.environ["DB_NAME"],
    user=os.environ["DB_USER"],
    password=os.environ["DB_PASSWORD"]
)

Java

// Java -- hardcoded API key (never do this)
private static final String API_KEY = "sk-prod-a1b2c3d4e5f6g7h8i9j0";

// Java -- correct approach: load from environment
private static final String API_KEY = System.getenv("OPENAI_API_KEY");

Sabit kodlanmış kimlik bilgilerini nasıl düzeltebilirsiniz?

Ortam değişkenleri, dağıtılmış uygulamalardaki gizli bilgiler için standart çözümdür. Gizli bilgi, dağıtım ortamında (sunucu, konteyner, Kubernetes gizli bilgisi veya bulut gizli bilgi yöneticisi) ayarlanır ve çalışma zamanında erişilir. Kaynak kodda gizli değer bulunmaz, yalnızca onu almak için kullanılan anahtar adı bulunur.

AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, Google Secret Manager gibi gizli bilgi yönetim hizmetleri , hizmetler arasında gizli bilgilerin döndürülmesi, denetlenmesi ve dağıtılması için üretim düzeyinde bir yaklaşım sunar. Uygulama, gizli bilgiyi bir ortam değişkeninden değil, başlangıçta (veya talep üzerine) kasadan alır; bu da yeniden dağıtım gerektirmeden döndürme ve her erişimin tam bir denetim kaydını sağlar.

.env Dosyaları (örneğin şu kütüphaneleri kullanarak) python-dotenv or dotenv Node.js'de bulunanlar yerel geliştirme için uygundur. Ortam değişkenleriyle aynı arayüzü sağlarlar ancak yerel bir dosyadan yükleme yaparlar. Kritik kural: .env Dosyalar şu konumda olmalıdır: .gitignore ve asla akıl hastanesine yatırılmamalıdır.

Daha önce kaydedilmiş sırları tespit etme: Eğer bir gizli bilgi koda işlenip commit edilmişse, tehlikeye girmiş kabul edilmeli ve derhal döndürülmelidir. Değeri mevcut daldan silmek, onu git geçmişinden kaldırmaz. Araçlar gibi git-filter-branch Ya da BFG Repo Cleaner geçmişi temizleyebilir, ancak bir commit işleminden sonra en güvenli varsayım, gizli bilginin açığa çıkmış olmasıdır.

Sabit kodlanmış API anahtarlarının önlenmesi

Üçüncü taraf API anahtarları için, sabit kodlamaya alternatifler bağlama bağlıdır:

  • Sunucu tarafı uygulamalar: ortam değişkenleri veya gizli yönetim hizmetleri
  • CI / CD boru hatları: işlem hattı gizli değişkenleri (GitHub Actions gizli bilgileri, GitLab CI değişkenleri)
  • Mobil uygulamalarAPI anahtarları asla istemci tarafı kodunda bulunmamalıdır; bunun yerine, sunucu tarafında saklanan anahtarla API'yi çağıran bir arka uç proxy'si kullanın.
  • Yapay zeka ajanları ve LLM entegrasyonları: API anahtarlarını aracı başlatma sırasında ortamdan yükleyin, asla komut istemlerinde veya fonksiyon çağrılarında sabit kodlanmış dizeler olarak geçirmeyin.

IBM i'de RPG güvenli kodlaması da aynı prensibi izler: harici veri alanları, veri kuyrukları veya sistem değerleri, program kaynak koduna kodlamak yerine ortama özgü bağlantı parametrelerini içermelidir.

Sabit Kodlanmış Değerlerin Önlenmesi: Kodla Tamamlanmış Örnekler

Ortam Değişkenleri

Ortam değişkenleri en evrensel çözümdür. Her büyük işletim sistemi, bulut platformu, konteynerleştirme sistemi ve dağıtım çerçevesi bunları destekler.

piton

# Python: load all configuration from environment
import os
from dotenv import load_dotenv

load_dotenv()  # loads .env file in development; ignored in production

DATABASE_URL = os.environ["DATABASE_URL"]
API_BASE_URL = os.environ.get("API_BASE_URL", "https://api.example.com")
MAX_RETRIES  = int(os.environ.get("MAX_RETRIES", "3"))
DEBUG_MODE   = os.environ.get("DEBUG", "false").lower() == "true"

javascript

// Node.js: access environment variables
require('dotenv').config();  // load .env in development

const config = {
  dbUrl:      process.env.DATABASE_URL,
  apiKey:     process.env.API_KEY,
  port:       parseInt(process.env.PORT, 10) || 3000,
  debug:      process.env.NODE_ENV !== 'production',
};

Java

// Java: environment variables via System.getenv()
public class AppConfig {
    public static final String DB_URL  = System.getenv("DATABASE_URL");
    public static final String API_KEY = System.getenv("THIRD_PARTY_API_KEY");
    public static final int    TIMEOUT = Integer.parseInt(
        Optional.ofNullable(System.getenv("REQUEST_TIMEOUT_MS")).orElse("5000")
    );
}

Yapılandırma Dosyaları

Yapılandırma dosyaları, ortama özgü ancak gizli olmayan değerleri, hizmet adlarını, özellik bayraklarını, sayfalama boyutlarını, önbellek TTL'lerini dışa aktarır.

tatlım

# config/production.yaml
database:
  host: prod-db.internal
  port: 5432
  pool_size: 20

api:
  base_url: https://api.partner.com/v2
  timeout_ms: 3000
  max_retries: 3

features:
  new_checkout: true
  beta_dashboard: false

piton

# Load at startup; never hardcode the values it contains
import yaml

with open(f"config/{os.environ['APP_ENV']}.yaml") as f:
    config = yaml.safe_load(f)

timeout = config["api"]["timeout_ms"]

Bağımlılık Enjeksiyonu

Bağımlılık enjeksiyonu, bileşenlerin kendi yapılandırmalarını oluşturması veya alması yerine, yapılandırılmış değerleri bileşenlere iletir. Bu, bileşenlerin izole bir şekilde test edilmesini ve ortam başına yapılandırılmasını sağlar.

Java

// Spring Boot: inject configuration via @Value
@Service
public class PaymentService {
    @Value("${payment.api.url}")
    private String apiUrl;

    @Value("${payment.api.timeout-ms}")
    private int timeoutMs;

    // No hardcoded URL or timeout anywhere in this class
    public PaymentResult process(Payment payment) {
        // uses apiUrl and timeoutMs injected from application.properties
    }
}

piton

# Python: simple constructor injection
class EmailService:
    def __init__(self, smtp_host: str, smtp_port: int, api_key: str):
        self.smtp_host = smtp_host
        self.smtp_port = smtp_port
        self.api_key   = api_key

# Wire at application startup, reading from environment
email_service = EmailService(
    smtp_host=os.environ["SMTP_HOST"],
    smtp_port=int(os.environ["SMTP_PORT"]),
    api_key=os.environ["EMAIL_API_KEY"],
)

Merkezi Sabitler ve Numaralandırmalar

Tasarım gereği gerçekten sabit olan değerler (HTTP durum kodları, etki alanına özgü durumlar, protokol tanımlayıcıları) dize sabitleri olarak dağıtılmak yerine tek bir adlandırılmış sabitler modülünde yer almalıdır.

piton

# Python: centralised constants
from enum import Enum

class OrderStatus(Enum):
    PENDING   = "pending"
    CONFIRMED = "confirmed"
    SHIPPED   = "shipped"
    DELIVERED = "delivered"
    CANCELLED = "cancelled"

# Usage: no magic strings scattered across modules
if order.status == OrderStatus.CONFIRMED:
    notify_warehouse(order)

Java

// Java: enum with business meaning
public enum UserRole {
    ADMIN("admin"),
    EDITOR("editor"),
    VIEWER("viewer");

    private final String value;
    UserRole(String value) { this.value = value; }
    public String getValue() { return value; }
}

// Replaces scattered "admin", "editor", "viewer" strings
if (user.getRole() == UserRole.ADMIN) {
    grantFullAccess(user);
}

Belirli Dillerde Kod Sabitleme

Python'da Sabit Kodlama Nedir?

Python'da, sabit kodlama en yaygın olarak URL'ler ve kimlik bilgileri için dize değişmezleri, iş mantığında sayısal sabitler ve belirli bir dizin yapısını varsayan dosya yolları şeklinde karşımıza çıkar. Python'ın os.environ hem de python-dotenv Bunlar, ortam tabanlı yapılandırma için standart mekanizmalardır. configparser Bu modül, INI formatındaki yapılandırma dosyalarını işler. pydantic-settings Varsayılan değerlere sahip ortam değişkenlerinden tür doğrulamalı yapılandırma sağlar; bu, üretim ortamındaki Python servisleri için önerilen yaklaşımdır.

Python'da sabit kodlanmış değerlerin tespiti: Bandit (parolalar ve anahtarlar gibi güvenlikle ilgili sabit kodlamalar için), Pylint ve Semgrep gibi statik analiz araçları, sabit kodlanmış kimlik bilgilerini ve sihirli sayıları otomatik olarak tanımlayabilir.

Java'da Sabit Kodlama Nedir?

Java'da, sabit kodlanmış değerler genellikle şu şekilde görünür: private static final String alanlar, @Value Spring Boot'un varsayılan değerleri satır içi olan ve dışa aktarılması gereken ek açıklamalar ve iş mantığındaki değişmez değerler. application.properties hem de application.yml Dosyalar, standart dışa aktarım mekanizmasıdır. @ConfigurationProperties-Açıklamalı sınıflar, YAML veya özellik dosyalarından tür güvenli, doğrulanmış yapılandırma nesneleri sağlar.

Java'da sabit kodlanmış değerlerin tespiti: SpotBugs, Find Security Bugs eklentisiyle sabit kodlanmış kimlik bilgilerini tespit eder. SonarQube ise sihirli sayıları, sabit kodlanmış URL'leri ve sabit kodlanmış şifreleri işaretler. SMART TS XLKurumsal analizimiz, Java kod tabanlarının yanı sıra COBOL ve diğer eski dilleri de kapsamaktadır.

Eski ve Ana Bilgisayar Kodlarında Sabit Kodlama

IBM ana bilgisayarlarında ve orta seviye sistemlerde kullanılan COBOL, RPG ve PL/I programları, belirli kodlama kalıplarına sahiptir: DD ifadelerine gömülü veri kümesi adları, program mantığındaki ortam tanımlayıcıları ve doğrudan programlara derlenen iş eşikleri. Bu değerlerin dışa aktarılması, ana bilgisayar dillerini anlayan araçlar gerektirir: sistem parametreleri (SYSPARM), harici veri alanları, DB2'deki yapılandırma tabloları ve parametreli JCL. Bu kalıpları büyük ölçekte tespit etmek için ana bilgisayar dillerini anlayan statik analiz araçlarına ihtiyaç duyulmaktadır.

Gerçek Dünya Yeniden Yapılandırması: Sabit Koddan Yapılandırılabilir Yapıya

Üç Aşamalı Yeniden Yapılandırma Yaklaşımı

Aşama 1: Keşfetme. Sabit kodlanmış değerlerin bir envanterini oluşturmak için tüm kod tabanında statik analiz çalıştırın; bu envanter türe (kimlik bilgileri, URL'ler, iş mantığı, sihirli sayılar) ve risk seviyesine göre gruplandırılır. Kimlik bilgilerine ve üretime özgü değerlere öncelik verin.

2. Aşama: Kategoriye göre dışsallaştırma. Kimlik bilgilerinden başlayın (en yüksek risk): tüm gizli bilgileri ortam değişkenlerine veya bir gizli bilgi yöneticisine taşıyın. Ardından ortama özgü URL'leri ve hizmet adlarını ele alın. Daha sonra iş mantığı eşiklerini ele alın. Son olarak, sihirli sayıları adlandırılmış sabitler veya yapılandırma değerleriyle değiştirerek bu sorunu çözün.

3. Aşama: Uygulama. Yeni, sabit kodlanmış kimlik bilgilerinde başarısız olan statik analiz kontrollerini CI işlem hattına ekleyin. Sihirli sayıları işaretleyen linting kuralları ekleyin. Kod inceleme kontrol listesi öğeleri ekleyin. Amaç, sabit kodlanmış bir değer eklemeyi doğru kalıbı kullanmaktan daha zor hale getirmektir.

Eski Projelerde Sabit Kodlanmış Değerlerin Belirlenmesi

Yıllar içinde kod içine sabit değerler yazılmış eski projelerde:

  • Kullanım grep veya ortak kalıplar için depo araması: bağlantı dizeleri, password, apikeyIP adresi kalıpları ve bilinen hizmet adları
  • Statik analiz araçlarını çalıştırın (Bandit, SonarQube, Semgrep, SMART TS XL(Dosyaları tek tek elle incelemeye gerek kalmadan eksiksiz bir envanter elde etmek için)
  • Git geçmişini kontrol ederek daha önce commit edilmiş ve silinmiş gizli bilgilere ulaşabilirsiniz; bu bilgilere depo geçmişinde hala erişilebilir.
  • Birden fazla dosyada aynı şekilde görünen değerleri arayın; bunlar merkezileştirme için aday dosyalardır.

Sabit kodlanmış değerlerin eklenmesinin önlenmesi

  • Ön taahhüt kancaları: kimlik doğrulama taramasını çalıştırın (örneğin, detect-secrets, git-secrets, truffleHog(her commit'in depoya ulaşmadan önce)
  • CI işlem hattı kapılarıKimlik bilgileri veya sihirli sayılar için yeni tanıtılan statik analiz bulgularını içeren derlemeleri başarısız kıl.
  • Kod inceleme kontrol listeleri: Takım inceleme sürecinde yapılandırmanın dışsallaştırılması için açık maddeler
  • Geliştirici oryantasyonu: Doğru kalıpları varsayılan olarak ayarlayın, ortam değişkenlerini zaten kullanan bir proje şablonu sağlayın ve .env.example dosya

Ne kadar SMART TS XL Büyük ölçekte sabit kodlanmış değerleri ortadan kaldırır.

Küçük kod tabanlarında bariz durumları bulmak için manuel arama ve grep yeterlidir. COBOL, Java, Python, .NET, RPG ve SQL dillerinde milyonlarca satır kod içeren kurumsal sistemlerde, kapsamlı sabit kodlu değer tespiti otomatik yapısal analiz gerektirir. SMART TS XL Bu, tüm bu dillerde eş zamanlı olarak statik analiz gerçekleştirir ve aşağıdakileri tanımlayan birleşik bir çapraz referans modeli oluşturur:

  • Bağlantı parametrelerindeki ve kimlik doğrulama çağrılarındaki metin dize değerleri, potansiyel kimlik bilgisi ifşası olarak işaretlenmiştir.
  • İş mantığındaki sihirli sayılar, yapılandırılabilir bir temel çizgiyle karşılaştırılır ve modüller arasında tutarsız olan veya farklı yerlerde farklı değerlerle görünen değerler belirlenir.
  • Birden fazla dosyada görünen ancak aynı mantıksal amaca hizmet eden yinelenen sabit değerler, merkezileştirme fırsatlarını gösterir.
  • COBOL programlarında, genellikle JCL parametreleri aracılığıyla yönetilen, ortama özgü tanımlayıcıları kodlayan değerler.
  • Sisteme önceden tanımlanmış değerlerden başlayarak, yeniden yapılandırma kararı verilmeden önce hangi alt işlemlerin bunlara bağlı olduğunu gösteren veri akış yolları.

Statik kod analizi özelliği envanteri sağlar. Etki analizi özelliği, sabit kodlanmış bir değer değiştirildiğinde nelerin etkileneceğini gösterir. Eski sistemlerin modernizasyonu özelliği, aynı mantıksal değerin bir ana bilgisayar programında ve bir Java servisinde bağımsız olarak sabit kodlandığı, izole düzeltmeler yerine koordineli iyileştirme gerektiren diller arası ve platformlar arası senaryolara bunu genişletir.

Özellikle güvenlik borcunu yöneten ekipler için, SMART TS XLSabit kodlanmış kimlik bilgilerinin tespiti, CI/CD işlem hatlarına bir derleme kapısı olarak entegre olur: sabit kodlanmış gizli bilgiler içeren yeni commit'ler, kodun ifşa edilebileceği bir depoya ulaşmadan önce derlemeyi otomatik olarak başarısız kılar.

Kod içine sabit kod yazmak bir bilgi sorunu değil, bir disiplin sorunudur.

Değerleri doğrudan koda yazan geliştiricilerin çoğu, bunu yapmamaları gerektiğini bilir. Ortam değişkenlerinin var olduğu, yapılandırma dosyalarının doğru yaklaşım olduğu ve kimlik bilgilerinin asla kaynak kodda yer almaması gerektiği bilgisi yaygın olarak bilinir ve anlaşılır. Sorun bilgi eksikliği değil: baskı altında disiplin eksikliği.

Teslimat süreleri, ortam değişkeni kurulumunu gereksiz bir yük gibi hissettiriyor. Eski kod tabanları, değerleri yerinde bırakmaktan ziyade dışsallaştırmayı daha riskli hale getiriyor. Tutarsız işe alım süreçlerine sahip büyük ekipler, yeni bir geliştiricinin yanlış olan mevcut bir kalıbı kopyalamasını kolaylaştırıyor. Bu nedenle, kurumsal ölçekte sabit kodlamayı ele almak, dokümantasyondan daha fazlasını gerektirir: yanlış kalıbı doğru kalıptan daha zor hale getiren otomatik bir uygulama gerektirir.

Gizli bilgiler içeren commit'leri reddeden ön commit kancaları, yeni sihirli sayılarda başarısız olan CI işlem hatları, yapılandırma dışsallaştırması hakkında açıkça soru soran kod inceleme kontrol listeleri ve bir kod tabanındaki mevcut sabit kodlanmış değerlerin tüm kapsamını ortaya çıkaran statik analiz araçları: bunlar, doğru yaklaşımı bilmek ile onu tutarlı bir şekilde uygulamak arasındaki boşluğu kapatan mekanizmalardır. Bu makaledeki kod örnekleri ve kalıpları teknik temeli sağlar. Uygulama mekanizmaları ise bunların kalıcı olmasını sağlar.