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
IsDeletedfiltreler;Users.IsActiveveSubeler.IsActivefiltrelenmez. Kodda da giriş sırasındaIsActivekontrolü yoktur (grep:Class/Ext/Sistem.LoginUser.vb,Class/Module/Login.vb,Form/Genel/FrmLoginForm.vbiçindeIsActivegeç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:6vb.) — VERIFIED.
2. Giriş akışı — VERIFIED
Kaynak: ERPPRO/Form/Genel/FrmLoginForm.vb, ERPPRO/Class/Module/Login.vb, ERPPRO/Class/Ext/Sistem.LoginUser.vb
- Ş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). - Parola ön-doğrulaması (
SubeListele, FrmLoginForm.vb:72-103):New AIO.Sistem.Users(UserId)yüklenir;Users.Passwordyükleme sırasındaCrypto.Decryptile 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ı denemedeEnd(: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). - Şube listesi:
Sistem.getusers(SirketId) Where UserId=…(:97). KullanıcınınUserDetailskaydı yoksa liste boş gelir;Login()"Lütfen bilgileri Eksiksiz Giriniz." verir (:105-107). - 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=0ile 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. - Denetim kaydı (
SaveLogin, Login.vb:5-18):Sistem.Login'eComputerName(Dns.GetHostName),IpAdress(GetHostByName(...).AddressList(0)),UserId,SubeId,Status("Success!"/"Incorrect Password!"),PrgVersionyazılır (Class/Sistem.Login.vb:98). Başarılı girişteProgram.LoginId = l.Id. Çıkış kaydı yoktur (VERIFIED:SaveLoginyalnız Login içinden çağrılır;Program.Close/FrmMainForm.FormCloseyazmaz). - Başarılı girişte
LoginInformation.Sirket/Sube/Kasa/Userstatik (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). - Ş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"",DecryptNothingdö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.vb — User.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ğrudanOKdöner (:36-38); girilen metinTextBoxEdit1.Text = ValidatePasswordile karşılaştırılır (:45). YanlıştaMessage.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 = ValidCodeolduğ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=…; yoksaSend()ile(SenderId=UserId, SubeId, TransactionId)INSERT → DB varsayılanı 6 haneli rastgele PIN üretir;IsActivehesaplanan kolon 120 sn sonra False olur.- Diyalog, girilen metni
Pin.PinCodeile 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) veSistem.GetPinCodesTVF ile listeleniyor (FrmMainForm.vb"PINCODES") — INFERRED: yönetici PIN'i listeden okuyup sözlü iletir. - Tetiklenme:
GlobalSettings.ModifyPermission/DeletePermission = tPermission.PinGerekliveyaMutabakatPermission = tPermissionV1.PinGerekli(iScreen.vb:622-645, 728-765; ParakendeSatis.vb:469-476; GiseEkrani.vb:604) →security/authorization.md§5. Pincode.Sendhata durumundaReturn Truedö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 |
Lisans/kurulum sabitleri (adları ve değerleri yazılmaz); 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.json → Sistem.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 (özet; ayrıntı kaynak kodda)
Kaynak: ERPPRO/Class/Lisans/Lisans.vb, FrmLisansGirisi.vb, FrmShowLisans.vb, Class/Module/Program.vb, Class/Module/Utils.vb, Form/Genel/FrmMainForm.vb
Gizlilik kuralı (§38 + lisans): Bu bölüm bilerek özet düzeyindedir. Seri numarasının hangi bileşenlerden türetildiği, dönüşüm kuralları, anahtar üretim yöntemi, doğrulama koşulları ve sunucuya/kuruluma bağlı özel durumlar wiki'ye yazılmaz; yalnız kaynak kodda ve lisans ekibindedir. Önceki sürümlerdeki ayrıntılar 16.09.2026 tarihinde kaldırılmıştır (bkz. §8 R7).
7.1 Donanım kimliği (seri numarası)
Lisans.SerialNumber, programın çalıştığı bilgisayarın donanım kimliğinden yerel olarak türetilir (Lisans.vb). Donanım değişimi seri numarasını değiştirebilir — INFERRED; destek pratiğindeki "yeni bilgisayar = yeni lisans" kuralının nedeni budur. Configuration/Hardware.vb içindeki alternatif HardwareID sınıfı kullanılmamaktadır (VERIFIED).
7.2 Anahtar ve doğrulama
Anahtar (Lisans.SerialKey) seri numarasına ve eşzamanlı kullanıcı sayısına (GlobalSettings.RdpCallUser) bağlıdır; kullanıcı sayısı değişince anahtar yenilenmelidir. Doğrulama IsValid(LicenseKey), durum IsLicensed (ServerLicense / FullVersion / Demo / Expired) ile yapılır; demo süresi 30 gündür. Üretim ve doğrulama yöntemi bu wiki'de anlatılmaz.
7.3 Anahtar girişi (FrmLisansGirisi)
Seri numarası ekranda gösterilir; anahtar makine\kullanıcı bazında Program.UserSettings.SerialKey (Sistem.Clients.SerialKey) alanına kaydedilir. "SMS ile al" akışı: basit CAPTCHA → SMS servisi üzerinden AIFASOFT'a bildirim → onay kodu ile anahtar (ayrıntı lisans ekibinde). Eşzamanlı kullanıcı sayısı (TxtCallUser) GlobalSettings.RdpCallUser olarak Sistem.Settings'e kaydedilir; bu değer lisans sözleşmesine bağlıdır ve yalnız AIFASOFT tarafından değiştirilir.
7.4 License.asmx web referansı
Web References/Wbs.License (GetKey(SerialNumber)) proxy'si tanımlıdır (URL değeri kopyalanmadı) ancak kodda çağrılmaz — VERIFIED. INFERRED: uzak lisans servisi tasarlanmış, kullanılmıyor.
7.5 Uygulanma noktaları
FrmMainForm.FormInit: Expired ise Ribbon kapatılır, FrmShowLisans gösterilir; FrmShowLisans.LisansBilgieriyaz Ribbon'u lisans durumuna göre açar/kapatır; "Kaldır" → SerialKey="" + Ribbon kapalı. Utils.CallLisansControl (Program.Init): çalışan ERPGOLD süreç 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ı).
7.6 Tasarım notu (güvenlik kaydı)
Lisans doğrulaması tamamen istemci tarafındadır; sunucu imzası veya çevrimiçi doğrulama yoktur. Kalıcı çözüm önerisi (TD kaydı): anahtarın sunucuda gizli anahtarla imzalanması (HMAC/RSA), doğrulamanın sunucuya taşınması ve kullanıcı sayısının imzalı anahtarın içine gömülmesi. Ayrıntı ürün sahibi / lisans ekibinde.
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 doğrulaması tamamen istemci tarafında; sunucu imzası / çevrimiçi doğrulama yok (ayrıntı kaynak kodda ve lisans ekibinde) | Lisans.vb |
| 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-131ERPPRO/Class/Module/Login.vb:5-18, 19-44, 204-232ERPPRO/Class/Ext/Sistem.LoginUser.vb:19-46ERPPRO/Class/Sistem.Login.vb:30, 98ERPPRO/Class/Dao/Sistem.Users.vb:28-54, 127-173, 177-218ERPPRO/Class/Module/Crypto.vb:6, 8-47, 48-117, 120-125ERPPRO/Form/Users/FrmSifreDegistir.vb:1-64;ERPPRO/Form/Users/FrmKullaniciEkle.vb:60, 80, 89, 108ERPPRO/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-64ERPPRO/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:269ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:46, 622-645, 720-727, 728-765ERPPRO/Class/Lisans/Lisans.vb;FrmLisansGirisi.vb;FrmShowLisans.vb(satır ayrıntısı lisans kuralı gereği yazılmaz)ERPPRO/Class/Module/Program.vb:31-55, 167-171, 186-195, 201-210, 230, 306-310ERPPRO/Class/Module/Utils.vb:177-197ERPPRO/Configuration/Hardware.vb:157-183(kullanılmıyor);ERPPRO/Configuration/ConfigurationForm.vb:297-367ERPPRO/Class/Module/InternalDb.vb:11ERPPRO/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; kolonlarkb_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.LoginRaporgörünümü mevcut; içeriği incelenmedi).FrmExLimitiçindekiInputPinBox.ValidCodedeğerinin kaynağı (sabit mi, hesaplanan mı).DijitalFatura/Helpers/Cryptoalgoritması veSettings_{Name}.jsondosyası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'sundaCryptoçağrısı grep'te görülmedi (INFERRED: düz metin), doğrulanmadı.Option Compareproje ayarı (parola karşılaştırmasının harf duyarlılığı) —.vbprojiçinde kontrol edilmedi.
