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 |
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.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
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: WMIWin32_Processor.ProcessorID(:96-107)BiosId: WMIWin32_BIOS.SerialNumber(:108-119)MemoryId:My.Computer.Info.TotalPhysicalMemory(:120-125)HDDSerial:Scripting.FileSystemObjectile uygulama sürücüsününSerialNumber(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.vbsınıfı (MB/CPU/MAC/HDD/BIOS →HardwareID) mevcut ama hiçbir yerde kullanılmıyor (grep:New Hardwareyok) — 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;RdpCallUserdeğişince anahtar değişir. IsValid(LicenseKey)(:21-27):Program.Config.SQLServer = Program.InstallIPise koşulsuz True (sunucu lisansı); aksi halde girilen anahtarSerialKeyile (tireler atılarak) karşılaştırılır.IsLicensed(:28-42): geçerli anahtar →ServerLicense/FullVersion; değilseDays > 30→Expired, aksiDemo.Days=Sistem.Subeler/Cari.IslemlerInsertDatemin–max farkı (:54-60) — INFERRED: demo süresi verinin yaşına bağlıdır.Program.InstalIDveProgram.InstallIPsabit sınıf özellikleridir (Program.vb:186-195, değerler kopyalanmadı).InstalIDkodda 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
PasswordBoxile doğrulanıncaTxtKeyData = Lisans.SerialKey(anahtar yerelde üretilir). TxtCallUserdeğişinceGlobalSettings.RdpCallUserdoğrudanSistem.Settings'e kaydedilir (:60-63).
7.4 License.asmx web referansı
Web References/Wbs.License(License.wsdl,Reference.vb→GetKey(SerialNumber)); URLapp.config:45-46veSettings.settingsERPPRO_Wbs_License_License(değer/URL kopyalanmadı).- Kodda çağrılmıyor:
Wbs.LicenseyalnızReference.vbve.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):Expiredise Ribbon kapatılır,FrmShowLisansgö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çindeProcessName = Application.ProductNamesayı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-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:5-46, 54-60, 62-84, 96-172;FrmLisansGirisi.vb:7-63;FrmShowLisans.vb:3-39ERPPRO/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.- Demo süresi (
Days) hesabındakiCari.Islemler I on S.Id=1join'inin amacı.
