AIFA AKADEMI · Kurumsal Wiki
4.310 makale
Ana sayfa Kurumsal Wiki › Kod mimarisi › Security › SEC-AUTHN

Kimlik Doğrulama

SECURITYERPGOLD_COREACTIVEHIGHSOURCE_IMPLEMENTED
Kanonik kaynak: markdown · bu sayfa üretilmiş görünümdür

Kaynak: docs/knowledge-base/security/authentication.md — KB-docs. Parola/hash algoritma ayrıntıları burada özetlenir; değer taşınmaz.

Kimlik Doğrulama (Authentication) — ERPPRO / ERPGOLD V2

Kapsam: Kullanıcı girişi, parolanın saklanma biçimi, parola değiştirme, kart/form/PIN parolaları, sabit kodlu parola varlıkları ve lisans kontrolü. Gerçeklik türü: AS-IMPLEMENTED (kod + DB şeması). Etiketler: VERIFIED / INFERRED / UNKNOWN. Gizlilik (§38): Parola değerleri, anahtarlar, IV, passphrase, telefon numaraları, IP/URL değerleri kopyalanmamıştır; yalnız varlığı ve konumu belirtilir ([REDACTED_SECRET]). Yetkilendirme (grup bayrakları, menü izinleri) ayrı dokümandadır → security/authorization.md. Başlangıç akışı → architecture/application-flow.md §2.6–2.7.


1. Veri modeli — VERIFIED (Kaynak: kb_src/db/columns.json, tables.json)

Tablo Kolonlar (özet) Rol
Sistem.Sirketler Id, Kodu, Aciklama, UserId, InsertDate, IsDeleted, RefNo Şirket (giriş ekranında ilk seçim)
Sistem.Users Id, RefNo, SirketId, UserName, Password nvarchar(100), Email, Gsm, UserId, InsertDate, IsDeleted, IsActive, PersonelId Kullanıcı hesabı; parola şifreli metin olarak burada
Sistem.UserDetails Id, UserId, SubeId, GroupId, KasaId, IsLocked, InsertDate, IsDeleted Kullanıcı ↔ Şube ↔ Kasa ↔ Grup ataması (bir kullanıcı birden çok şubede olabilir)
Sistem.UserGroup Id, SirketId, GroupName, Permission, UserId, InsertDate, IsDeleted Yetki grubu (→ authorization.md)
Sistem.Login Id, UserId, SubeId, ComputerName, IpAdress, LoginDate (getdate()), PrgVersion, Status Giriş denetim kaydı (başarılı/başarısız) — 41.064 satır (tables.json)
Sistem.PinCode Id, SenderId, SubeId, TransactionId, PinCode (varsayılan: 6 haneli rastgele, floor(rand(checksum(newid()))*(999999-100000)+100000)), IsActive (hesaplanan: datediff(second, InsertDate, getdate()) <= 120), InsertDate İşlem düzeltme/iptal için tek kullanımlık PIN, 120 sn geçerli
Sistem.Clients ClientName (PK gibi kullanılıyor), …, SerialKey, AutoErrorHandle, … Makine\Kullanıcı bazlı istemci ayarları; lisans anahtarı burada

Sistem.GetUsers(@SirketId) inline TVF (Kaynak: kb_src/db/modules_all.json):

select D.Id, U.Id as UserId, U.PersonelId, U.SirketId, D.SubeId, KasaId, Sb.Kodu as Sube, Ks.Kodu as Kasa,
       d.GroupId, G.GroupName, U.UserName, U.Password, IsLocked as Lock
from Sistem.UserDetails D
left join Sistem.UserGroup G on G.Id=D.GroupId and G.IsDeleted='False'
left join Sistem.Users U on U.Id=D.UserId and U.IsDeleted='False'
left join Sistem.Subeler Sb on Sb.Id=D.SubeId
left join Sistem.Kasalar Ks on Ks.Id=KasaId
where D.IsDeleted='False' and (U.SirketId=@SirketId or @SirketId=0)
  • VERIFIED: Fonksiyon IsDeleted filtreler; Users.IsActive ve Subeler.IsActive filtrelenmez. Kodda da giriş sırasında IsActive kontrolü yoktur (grep: Class/Ext/Sistem.LoginUser.vb, Class/Module/Login.vb, Form/Genel/FrmLoginForm.vb içinde IsActive geçmiyor). → Pasif kullanıcı giriş yapabilir (INFERRED risk).
  • IsLocked (Lock) girişte engel değildir; yalnız kasa/şube seçim kutularını kilitler (Controls/Islem Ekranı/Base Control/iHesapControl.vb:71, Controls/Islem Ekranı/Ekran/FrmTransferEkle.vb:7, Form/Tanımlamalar/Stok/Mutabakat.vb:6 vb.) — VERIFIED.

2. Giriş akışı — VERIFIED

Kaynak: ERPPRO/Form/Genel/FrmLoginForm.vb, ERPPRO/Class/Module/Login.vb, ERPPRO/Class/Ext/Sistem.LoginUser.vb

  1. Şirket → Kullanıcı seçimi: Kullanıcı adları açılır listede gösterilir (Sistem.Users Where SirketId=… And IsDeleted='False', FrmLoginForm.vb:66). INFERRED: kullanıcı adı numaralandırma/keşif korumasızdır (tüm kullanıcı adları herkese listelenir).
  2. Parola ön-doğrulaması (SubeListele, FrmLoginForm.vb:72-103): New AIO.Sistem.Users(UserId) yüklenir; Users.Password yükleme sırasında Crypto.Decrypt ile düz metne çözülür (Class/Dao/Sistem.Users.vb:43). Karşılaştırma: txtPassword.Text <> u.Password (:80) — düz metin, büyük/küçük harf duyarlı (VB <> string karşılaştırması, Option Compare Binary varsayımı — INFERRED). 3 hatalı denemede End (:81-84). Sayaç (HataSay) form yaşam döngüsünde tutulur; uygulama yeniden başlatılınca sıfırlanır; hesap kilitleme yoktur (VERIFIED: Sistem.Users/UserDetails üzerinde kilit güncellemesi yapan kod yok).
  3. Şube listesi: Sistem.getusers(SirketId) Where UserId=… (:97). Kullanıcının UserDetails kaydı yoksa liste boş gelir; Login() "Lütfen bilgileri Eksiksiz Giriniz." verir (:105-107).
  4. Asıl giriş (LoginInformation.Login, Login.vb:19-44): AIO.Sistem.LoginUser(SubeId, UserId)Sistem.GetUsers(0) Where UserId=… And SubeId=… (LoginUser.vb:22). Not: @SirketId=0 ile tüm şirketler taranır; filtre yalnız UserId+SubeId'dir. Parola tekrar düz metin karşılaştırılır (iLogin.Password = Password And Password.Trim <> "", Login.vb:21). Boş parola reddedilir.
  5. Denetim kaydı (SaveLogin, Login.vb:5-18): Sistem.Login'e ComputerName (Dns.GetHostName), IpAdress (GetHostByName(...).AddressList(0)), UserId, SubeId, Status ("Success!" / "Incorrect Password!"), PrgVersion yazılır (Class/Sistem.Login.vb:98). Başarılı girişte Program.LoginId = l.Id. Çıkış kaydı yoktur (VERIFIED: SaveLogin yalnız Login içinden çağrılır; Program.Close/FrmMainForm.FormClose yazmaz).
  6. Başarılı girişte LoginInformation.Sirket/Sube/Kasa/User statik (Shared) alanlar olarak süreç boyunca tutulur (Login.vb:204-232). Oturum zaman aşımı, yeniden kimlik doğrulama yoktur (VERIFIED: grep'te timer tabanlı kilit yok — INFERRED).
  7. Şube değiştirme (FrmMainForm.vb:35-52): LoginInformation.Login(YeniSube, User.UserId, User.Password) — parola bellekteki düz metin kopyadan gönderilir, kullanıcıya sorulmaz.

SQL notu (VERIFIED): Giriş sorguları string birleştirme ile kurulur ("… Where UserId='" & Val(CmbUser.EditValue) & "'"); Val() sayısal zorlama yaptığı için bu noktada SQL enjeksiyonu pratikte sınırlıdır — INFERRED; ancak LoginUser.New doğrudan UserId_/SubeId_ (Integer) birleştirir, tip Integer olduğu için güvenlidir.


3. Parola saklama biçimi — VERIFIED

Kaynak: ERPPRO/Class/Module/Crypto.vb:1-128

  • Hash değil, geri döndürülebilir simetrik şifreleme: Crypto.Encrypt/Crypto.Decrypt.
  • Algoritma: RijndaelManaged (AES), CipherMode.CBC, anahtar 256 bit (:16, :27-29).
  • Anahtar türetme: PasswordDeriveBytes(passPhrase, saltValueBytes, "MD5", 10 iterasyon) (:24) — passPhrase sınıf içinde sabit (Password_, :6, değer kopyalanmadı); salt = MaskDes_ = boş dize (:120) → salt fiilen yok; IV sabit dize (initVector özelliği, :121-125, değer kopyalanmadı).
  • Girdi: Replace(Value, "-", "") — parola içindeki tire karakterleri şifrelemeden önce silinir (:10, :51); çıktı Base64.
  • Hata durumunda Encrypt "", Decrypt Nothing döner (boş catch, :44-46, :113-116).
  • Sonuç (INFERRED, yüksek güven): Aynı parola her zaman aynı şifreli metni üretir (sabit anahtar + sabit IV + salt yok) → DB'de eşit parolalar eşit görünür; anahtar kaynak kodda olduğundan DB'ye erişen herkes tüm parolaları çözebilir.

Aynı Crypto sınıfı ile şifrelenen diğer alanlar (VERIFIED, grep Crypto.Encrypt/Decrypt): | Alan | Dosya | |---|---| | Sistem.Users.Password | Class/Dao/Sistem.Users.vb:43, 144, 188; Class/Ext/Sistem.LoginUser.vb:35 | | Cari.Kartlar.Sifre (kart şifresi) | Class/Dao/Cari.Kart.vb:36, 281, 437; Cari.View.Hesaplistesi.GetPassword() :87-89 | | Genel.Dosyalar.Password (doküman parolası) | Class/Dao/Genel.Dosya.vb:134, 200; Class/Ext/Genel.DosyaEx.vb:29 | | Rapor parolası | Designer/ReportManager/Class/Reports.vb:66, 214, 277 | | RDP parolası | RDP/RDP.vb:40, 71, 183, 233 |

GetPassword() (Cari.View.Hesaplistesi.vb:87-89): Crypto.Decrypt(Password) — görünüm satırındaki şifreli kart parolasını çözer; iHesapControl.onAccountValidate (iHesapControl.vb:82-90) ve iFormBase.vb:269 bunu PasswordBox.ShowDialog(..., .GetPassword, "Lütfen İşlem Yapabilmek İçin Kart Şifresini Giriniz.") ile kullanır; başarılı hesap seçiminde Cari.AccountLog tablosuna (HesapId, ComputerName, IpAdress, UserId) kayıt atılır (iHesapControl.vb:89-90).

Yapılandırma dosyasındaki bağlantı dizesi ise farklı bir yöntemle şifrelenir: Configuration.AES_Encrypt/AES_Decrypt — Rijndael ECB, anahtar = MD5(passphrase) 16 baytının 32 bayta kopyalanması (ConfigurationForm.vb:331-367; passphrase sabit, :301/:325, değer kopyalanmadı). → architecture/configuration.md.

DijitalFatura projesi kendi Helpers.Crypto sınıfını kullanır (DijitalFatura/Base/BaseEntegrator.vb:38, 98) — UNKNOWN: algoritması bu dokümanda incelenmedi.


4. Parola değiştirme — VERIFIED

Kaynak: ERPPRO/Form/Users/FrmSifreDegistir.vb:1-64 - Giriş ekranından (BtnSifreDegistir, FrmLoginForm.vb:127-131) oturum açmadan ve ana menüden ("SIFREDEGISTIR", FrmMainForm.vb:379-383) erişilir. - Form, şirketin tüm kullanıcılarını CmbUser'da listeler (:5-8); giriş ekranından açıldığında herhangi bir kullanıcı seçilebilir; mevcut parola bilinmeden değişiklik yapılamaz (txtPassword.Text = User.Password kontrolü, :29, :40). - Yeni parola iki kez girilir, eşitse U.Password = TxtNewPassword.Text; U.Save() (:50-54) → Sistem.Users.Update ile Crypto.Encrypt (Sistem.Users.vb:188). - Karmaşıklık/uzunluk/geçmiş kuralı yoktur; boş olmayan herhangi bir metin kabul edilir (:40). Parola alanı DB'de nvarchar(100), Base64 şifreli metin bu sınıra sığmalıdır (INFERRED: çok uzun parolalarda kesilme riski — UNKNOWN, test edilmedi). - Sistem.Users.Update her kayıtta Password dahil tüm alanları yazar (Sistem.Users.vb:179); Password = Nothing ise DBNull yazılır (:190) → INFERRED: FrmKullaniciEkle üzerinden parola boş kaydedilirse kullanıcı giriş yapamaz (Password.Trim <> "" kuralı).

Kullanıcı tanımlama: Form/Users/FrmKullaniciEkle.vbUser.Password = TxtPassword.Text (:60), Sistem.UserDetails INSERT/UPDATE string birleştirme ile (:80, :89, :108) — VERIFIED.


5. Kart şifresi / Form şifresi / PIN — VERIFIED

5.1 PasswordBox (Class/Other/PasswordBox.vb:30-63)

  • ShowDialog(Owner, ValidatePassword, Message): beklenen parola parametre olarak düz metin verilir; boşsa doğrudan OK döner (:36-38); girilen metin TextBoxEdit1.Text = ValidatePassword ile karşılaştırılır (:45). Yanlışta Message.Show(IncorrectPassword); deneme sayacı (Say) artar ama sınır uygulanmaz (:48-52).
  • Kullanım yerleri: kart şifresi (iHesapControl.vb:85, iFormBase.vb:269), ShadowMode geçişi (kullanıcının kendi parolası, Program.vb:36), PopupGrid form şifresi (AIO.Design.PopupGrid.Password, Program.vb:306-310), doküman parolası (Controls/General/Dokuman/DokumanList.vb:116), lisans/yönetici işlemleri (aşağıda §6).

5.2 InputPinBox (Class/Dao/Islem/InputPinBox.vb)

  • ValidCode özelliği ile beklenen kod düz metin verilir; TextEdit1.Text = ValidCode olduğunda Tamam etkinleşir (:11-13). Kullanım: Class/Dao/Islem/FrmExLimit.vb:63 (limit aşımı onayı — UNKNOWN: kodun nereden geldiği incelenmedi).

5.3 PinShowDialog + Sistem.PinCode (Class/Dao/Islem/PinShowDialog.vb, Class/Dao/Sistem.Pincode.vb:20-64)

  • AIO.Sistem.Pincode(TransactionId): Select PinCode From Sistem.PinCode Where IsActive='True' and TransactionId=…; yoksa Send() ile (SenderId=UserId, SubeId, TransactionId) INSERT → DB varsayılanı 6 haneli rastgele PIN üretir; IsActive hesaplanan kolon 120 sn sonra False olur.
  • Diyalog, girilen metni Pin.PinCode ile istemci tarafında karşılaştırır (PinShowDialog.vb:18). PIN'i yetkiliye ulaştıran ayrı bir mekanizma kodda bu sınıflarda yok; FrmPingCodes (Form/Tanımlamalar/Cari/FrmPingCodes) ve Sistem.GetPinCodes TVF ile listeleniyor (FrmMainForm.vb "PINCODES") — INFERRED: yönetici PIN'i listeden okuyup sözlü iletir.
  • Tetiklenme: GlobalSettings.ModifyPermission/DeletePermission = tPermission.PinGerekli veya MutabakatPermission = tPermissionV1.PinGerekli (iScreen.vb:622-645, 728-765; ParakendeSatis.vb:469-476; GiseEkrani.vb:604) → security/authorization.md §5.
  • Pincode.Send hata durumunda Return True döner (her iki dalda True, :52-56) — INFERRED: ekleme başarısız olsa bile "başarılı" algılanır; boş catch.

6. Sabit kodlu parola varlıkları (yalnız varlık; değerler kopyalanmadı) — VERIFIED

# Konum Amaç Not
1 ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:722 Fiş numarası ile iptal (BtnIptalFisNo): "Lütfen Yönetici Şifrenizi Giriniz" → Cari.Islemler IsDeleted='True' UPDATE Sabit yönetici parolası; buton yalnız Program.IsResmi şubelerde görünür (:46)
2 ERPPRO/Class/Lisans/FrmLisansGirisi.vb:14 TxtCallUser (eşzamanlı kullanıcı sayısı) düzenlemesini açan servis parolası Sabit
3 ERPPRO/Form/Tanımlamalar/Cari/FrmCariHesapEkle.vb:267 F6 ile "Sistem Şifresi" → CmbKarsiHesap kilidi Sabit
4 ERPPRO/Class/Module/Crypto.vb:6, 123 Parola şifreleme passphrase + IV Sabit anahtar materyali
5 ERPPRO/Configuration/ConfigurationForm.vb:301, 325 Config.cfg AES passphrase Sabit
6 ERPPRO/Class/Module/Program.vb:186-194, 201-210 InstalID, InstallIP sabitleri; 3. parti lisans dizesi ve AifaDev.Common.LicenseKey Lisans başlatma (içerik kopyalanmadı)
7 ERPPRO/Form/Genel/FrmLoginForm.vb:12-19 3. parti bileşen lisans dizesi Kopyalanmadı
8 ERPPRO/Class/Module/InternalDb.vb:11 InternalDb.ConnStr varsayılan değeri: kullanıcı adı ve parola içeren bağlantı dizesi (sa hesabı) Çalışma zamanında Program.ConnectDatabase üzerine yazar; ancak kaynakta durur
9 ERPPRO/Class/Lisans/FrmLisansGirisi.vb:46 JetSms servis kimlik bilgileri (kullanıcı/parola/başlık) düz metin Kopyalanmadı
10 ERPPRO/Class/Lisans/FrmLisansGirisi.vb:40, FrmLoginForm.vb:114-116 SMS hedef telefon numaraları [REDACTED_PERSONAL_DATA]
11 DB Sistem.SirketOlustur (proc) satır 32-35 Yeni şirket kurulumunda varsayılan admin kullanıcı adı, parola (şifreli metin) ve grup Permission literal olarak INSERT edilir Kaynak: kb_src/db/modules_all.jsonSistem.SirketOlustur; değerler kopyalanmadı
12 ERPPRO/app.config:10-12 connectionStrings bölümünde 3 bağlantı dizesi (değerler kopyalanmadı) → configuration.md

POS/perakende ekranı (Controls/Islem Ekranı/Parakende/HizliSatisEkrani.vb): grep'te password/sifre/pin literal'i bulunmadı — VERIFIED (bu dosyada sabit parola yok). scan.json secret_lines: 189 — depo genelinde sır olarak işaretlenmiş satır sayısı (istatistik).


7. Lisans kontrolü akışı — VERIFIED

Kaynak: ERPPRO/Class/Lisans/Lisans.vb, FrmLisansGirisi.vb, FrmShowLisans.vb, Class/Module/Program.vb:167-171, 186-195, Class/Module/Utils.vb:177-197, Form/Genel/FrmMainForm.vb:13-17

7.1 Donanım kimliği (Lisans.SerialNumber = GetHWID(), Lisans.vb:62-66, 137-172)

  • HWID_ = CpuId() & BiosId() & MemoryId() & HDDSerial():
  • CpuId: WMI Win32_Processor.ProcessorID (:96-107)
  • BiosId: WMI Win32_BIOS.SerialNumber (:108-119)
  • MemoryId: My.Computer.Info.TotalPhysicalMemory (:120-125)
  • HDDSerial: Scripting.FileSystemObject ile uygulama sürücüsünün SerialNumber (Hex) (:136-160); hata → MessageBox("Lisans No Alınamadı.")
  • Karakterler ASCII koda çevrilir, 6 toplam hesaplanır, çift konumlar {"A","E","B","R","U","H","K","C","T","Z"} harf tablosuyla değiştirilir → seri numarası (:145-171). Evet, donanım kimliğidir (CPU + BIOS + RAM + disk). INFERRED: RAM/disk değişimi seri numarasını değiştirir.
  • Alternatif Configuration/Hardware.vb sınıfı (MB/CPU/MAC/HDD/BIOS → HardwareID) mevcut ama hiçbir yerde kullanılmıyor (grep: New Hardware yok) — VERIFIED.

7.2 Anahtar (Lisans.SerialKey, Lisans.vb:67-84)

  • Seri numarasının ters çevrilmiş karakterlerinin ASCII kodu + sıra + GlobalSettings.RdpCallUser (eşzamanlı kullanıcı sayısı) ile 4'erli bloklar üretilir, ilk 24 karakter anahtardır. Yani anahtar istemci tarafında yerel olarak hesaplanabilir; RdpCallUser değişince anahtar değişir.
  • IsValid(LicenseKey) (:21-27): Program.Config.SQLServer = Program.InstallIP ise koşulsuz True (sunucu lisansı); aksi halde girilen anahtar SerialKey ile (tireler atılarak) karşılaştırılır.
  • IsLicensed (:28-42): geçerli anahtar → ServerLicense/FullVersion; değilse Days > 30Expired, aksi Demo. Days = Sistem.Subeler/Cari.Islemler InsertDate min–max farkı (:54-60) — INFERRED: demo süresi verinin yaşına bağlıdır.
  • Program.InstalID ve Program.InstallIP sabit sınıf özellikleridir (Program.vb:186-195, değerler kopyalanmadı). InstalID kodda başka yerde kullanılmıyor (grep) — VERIFIED.

7.3 Anahtar girişi (FrmLisansGirisi)

  • Seri no gösterilir; anahtar Program.UserSettings.SerialKey (Sistem.Clients.SerialKey, makine\kullanıcı bazlı) alanına kaydedilir (:24-28).
  • "SMS ile al" akışı (:30-43): basit toplama CAPTCHA → JetSms web servisi ile şirket kodu, bilgisayar adı, CallUser, seri ve hesaplanmış anahtar ile rastgele onay kodu sabit bir numaraya SMS'lenir; onay kodu PasswordBox ile doğrulanınca TxtKeyData = Lisans.SerialKey (anahtar yerelde üretilir).
  • TxtCallUser değişince GlobalSettings.RdpCallUser doğrudan Sistem.Settings'e kaydedilir (:60-63).

7.4 License.asmx web referansı

  • Web References/Wbs.License (License.wsdl, Reference.vbGetKey(SerialNumber)); URL app.config:45-46 ve Settings.settings ERPPRO_Wbs_License_License (değer/URL kopyalanmadı).
  • Kodda çağrılmıyor: Wbs.License yalnız Reference.vb ve .vbproj'da geçer (grep) — VERIFIED. INFERRED: uzak lisans servisi tasarlanmış ama yerel anahtar hesaplaması ile değiştirilmiş.

7.5 Uygulanma noktaları

  • FrmMainForm.FormInit (:13-17): Expired ise Ribbon kapatılır, FrmShowLisans gösterilir; FrmShowLisans.LisansBilgieriyaz (:9-34) Ribbon'u lisans durumuna göre açar/kapatır; "Kaldır" → SerialKey="" + Ribbon kapalı (:35-39).
  • Utils.CallLisansControl (Program.Init:230; Utils.vb:177-197): Process.GetProcesses() içinde ProcessName = Application.ProductName sayısı RdpCallUser'ı aşarsa "Kullanıcı Lisansınız Aşıldı." + Program.Close(). INFERRED: kontrol makine başına süreç sayar (RDP sunucusunda anlamlı); belirli bir SQL sunucu adresi için atlanır (:182, değer kopyalanmadı).

8. Riskler (INFERRED; kanıt satırları yukarıda)

# Risk Kanıt
R1 Parolalar geri döndürülebilir şekilde, sabit anahtar/IV ve saltsız saklanıyor; DB erişimi = tüm parolalar Crypto.vb:6, 24, 120-125; Sistem.Users.vb:43
R2 Parola karşılaştırması istemcide düz metin; parola bellekte (LoginInformation.User.Password) süreç boyunca tutuluyor FrmLoginForm.vb:80; Login.vb:21; FrmMainForm.vb:41
R3 Sabit kodlu yönetici/sistem parolaları ile kritik işlemler (fiş iptali → Cari.Islemler UPDATE) iScreen.vb:722-727; FrmCariHesapEkle.vb:267
R4 IsActive=False kullanıcılar giriş yapabilir; hesap kilitleme yok; 3 deneme sayacı yalnızca süreç ömründe GetUsers tanımı; FrmLoginForm.vb:81-84
R5 Kullanıcı adları oturum açmadan listeleniyor; parola değiştirme formu oturum açmadan erişilebilir (mevcut parola gerekli) FrmLoginForm.vb:66, 127-131
R6 Kaynakta sa kimlik bilgili varsayılan bağlantı dizesi InternalDb.vb:11
R7 Lisans anahtarı istemcide hesaplanabilir; sunucu adresi eşleşmesi ile lisans koşulsuz geçerli Lisans.vb:21-27, 67-84
R8 PIN doğrulaması istemci tarafında; PIN değeri okunabilir (Sistem.GetPinCodes) PinShowDialog.vb:18; Pincode.vb:40-45
R9 Sistem.Login çıkış kaydı yok; oturum zaman aşımı yok Login.vb:5-18
R10 UserDetails INSERT/UPDATE string birleştirme (yönetici ekranı) FrmKullaniciEkle.vb:80, 89, 108

9. Kanıt listesi

  • ERPPRO/Form/Genel/FrmLoginForm.vb:50, 62-70, 72-103, 104-123, 127-131
  • ERPPRO/Class/Module/Login.vb:5-18, 19-44, 204-232
  • ERPPRO/Class/Ext/Sistem.LoginUser.vb:19-46
  • ERPPRO/Class/Sistem.Login.vb:30, 98
  • ERPPRO/Class/Dao/Sistem.Users.vb:28-54, 127-173, 177-218
  • ERPPRO/Class/Module/Crypto.vb:6, 8-47, 48-117, 120-125
  • ERPPRO/Form/Users/FrmSifreDegistir.vb:1-64; ERPPRO/Form/Users/FrmKullaniciEkle.vb:60, 80, 89, 108
  • ERPPRO/Class/Other/PasswordBox.vb:30-63; ERPPRO/Class/Dao/Islem/InputPinBox.vb; ERPPRO/Class/Dao/Islem/PinShowDialog.vb; ERPPRO/Class/Dao/Sistem.Pincode.vb:20-64
  • ERPPRO/Class/Dao/Cari.View.Hesaplistesi.vb:87-89; ERPPRO/Controls/Islem Ekranı/Base Control/iHesapControl.vb:82-90; ERPPRO/Controls/Islem Ekranı/Ekran/iFormBase.vb:269
  • ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:46, 622-645, 720-727, 728-765
  • ERPPRO/Class/Lisans/Lisans.vb:5-46, 54-60, 62-84, 96-172; FrmLisansGirisi.vb:7-63; FrmShowLisans.vb:3-39
  • ERPPRO/Class/Module/Program.vb:31-55, 167-171, 186-195, 201-210, 230, 306-310
  • ERPPRO/Class/Module/Utils.vb:177-197
  • ERPPRO/Configuration/Hardware.vb:157-183 (kullanılmıyor); ERPPRO/Configuration/ConfigurationForm.vb:297-367
  • ERPPRO/Class/Module/InternalDb.vb:11
  • ERPPRO/Web References/Wbs.License/Reference.vb:31-79; ERPPRO/app.config:45-46; ERPPRO/ERPPRO.vbproj:3670-3679
  • DB: Sistem.GetUsers (IF), Sistem.SirketOlustur (P), Sistem.GetPinCodes (IF) — kb_src/db/modules_all.json; kolonlar kb_src/db/columns.json; satır sayıları kb_src/db/tables.json

10. Bilinmeyenler (UNKNOWN)

  • Sistem.Login üzerinde başarısız giriş sayısına göre uyarı/rapor var mı (Sistem.LoginRapor görünümü mevcut; içeriği incelenmedi).
  • FrmExLimit içindeki InputPinBox.ValidCode değerinin kaynağı (sabit mi, hesaplanan mı).
  • DijitalFatura/Helpers/Crypto algoritması ve Settings_{Name}.json dosyasındaki entegratör kimlik bilgilerinin korunma düzeyi.
  • Sistem.Subeler.EntUserName/EntPassword (e-fatura entegratör kimlik bilgileri) kolonlarının şifreli olup olmadığı — Sube DAO'sunda Crypto çağrısı grep'te görülmedi (INFERRED: düz metin), doğrulanmadı.
  • Option Compare proje ayarı (parola karşılaştırmasının harf duyarlılığı) — .vbproj içinde kontrol edilmedi.
  • Demo süresi (Days) hesabındaki Cari.Islemler I on S.Id=1 join'inin amacı.