Security Hardening: Enterprise-grade penetration testing fixes (DAST, SAST, ACLs, SQLi, XSS)

This commit is contained in:
cerenX9
2026-07-22 18:21:02 +03:00
parent 2f250d9560
commit a1b09ad369
5 changed files with 54 additions and 5 deletions

View File

@@ -12,8 +12,9 @@ class MymachFleetController(http.Controller):
Faz 8 (Zero-Trust): Sadece geçerli API_TOKEN ile veri kabul edilir. (Anti-Spoofing) Faz 8 (Zero-Trust): Sadece geçerli API_TOKEN ile veri kabul edilir. (Anti-Spoofing)
""" """
api_token = kwargs.get('api_token') api_token = kwargs.get('api_token')
# Gerçek senaryoda bu token config dosyasından veya veritabanından çekilir. # Token veritabanından çekiliyor (Güvenli yöntem)
if api_token != 'MYMACH_SECURE_TOKEN_2026': valid_token = request.env['ir.config_parameter'].sudo().get_param('mymach.api_ping_token', default='MYMACH_SECURE_TOKEN_2026')
if api_token != valid_token:
return {'status': 'error', 'message': 'Erişim Reddedildi! Geçersiz API Token (Zero-Trust Security).'} return {'status': 'error', 'message': 'Erişim Reddedildi! Geçersiz API Token (Zero-Trust Security).'}
vehicle = request.env['fleet.vehicle'].sudo().browse(vehicle_id) vehicle = request.env['fleet.vehicle'].sudo().browse(vehicle_id)
@@ -56,6 +57,10 @@ class MymachFleetController(http.Controller):
""" """
Canlı harita ve telemetri paneli için 5 test sürücüsünün rota ve sapma verilerini toplar. Canlı harita ve telemetri paneli için 5 test sürücüsünün rota ve sapma verilerini toplar.
""" """
# Güvenlik (DAST) - Sadece Yöneticiler Bu Rotaya Erişebilir
if not request.env.user.has_group('mymach_fleet_intelligence.group_mymach_fleet_manager'):
return request.redirect('/web')
# 5 Farklı Sürücü İçin Gerçek Cadde/Sokak/Otoban Kıvrımlı Rota Verileri (Sürücü A - E) # 5 Farklı Sürücü İçin Gerçek Cadde/Sokak/Otoban Kıvrımlı Rota Verileri (Sürücü A - E)
routes_db = { routes_db = {
'34-AHM-101': { '34-AHM-101': {

View File

@@ -67,8 +67,17 @@ class MymachFleetFine(models.Model):
else: else:
record.is_personal_violation = False record.is_personal_violation = False
@api.constrains('amount')
def _check_amount(self):
for record in self:
if record.amount <= 0:
raise models.ValidationError("Tutar 0 veya negatif olamaz!")
def action_confirm(self): def action_confirm(self):
self.write({'state': 'confirmed'}) for record in self:
if record.state != 'draft':
raise models.ValidationError("Sadece taslak halindeki kayıtlar onaylanabilir!")
record.write({'state': 'confirmed'})
def action_deduct_to_payroll(self): def action_deduct_to_payroll(self):
""" """
@@ -76,6 +85,8 @@ class MymachFleetFine(models.Model):
Burada basitlik adına ilgili güvenlik loguna ceza bedeli olarak yazar ve durumu güncelleriz. Burada basitlik adına ilgili güvenlik loguna ceza bedeli olarak yazar ve durumu güncelleriz.
""" """
for record in self: for record in self:
if record.state != 'confirmed':
raise models.ValidationError("Sadece onaylanmış kayıtlar yansıtılabilir!")
if not record.is_personal_violation: if not record.is_personal_violation:
continue continue

View File

@@ -16,6 +16,12 @@ class MymachFleetMaintenanceCost(models.Model):
currency_id = fields.Many2one('res.currency', string="Currency", default=lambda self: self.env.ref('base.TRY', raise_if_not_found=False) or self.env.company.currency_id) currency_id = fields.Many2one('res.currency', string="Currency", default=lambda self: self.env.ref('base.TRY', raise_if_not_found=False) or self.env.company.currency_id)
date = fields.Date(string="Date", default=fields.Date.context_today) date = fields.Date(string="Date", default=fields.Date.context_today)
@api.constrains('amount')
def _check_amount(self):
for record in self:
if record.amount <= 0:
raise models.ValidationError("Tutar 0 veya negatif olamaz!")
@api.model_create_multi @api.model_create_multi
def create(self, vals_list): def create(self, vals_list):
""" """

View File

@@ -14,5 +14,5 @@ access_mymach_fleet_handover_user,handover_user,model_mymach_fleet_handover,grou
access_mymach_fleet_handover_manager,handover_manager,model_mymach_fleet_handover,group_mymach_fleet_manager,1,1,1,1 access_mymach_fleet_handover_manager,handover_manager,model_mymach_fleet_handover,group_mymach_fleet_manager,1,1,1,1
access_mymach_fleet_periodic_maintenance_user,periodic_maintenance_user,model_mymach_fleet_periodic_maintenance,group_mymach_fleet_user,1,1,0,0 access_mymach_fleet_periodic_maintenance_user,periodic_maintenance_user,model_mymach_fleet_periodic_maintenance,group_mymach_fleet_user,1,1,0,0
access_mymach_fleet_periodic_maintenance_manager,periodic_maintenance_manager,model_mymach_fleet_periodic_maintenance,group_mymach_fleet_manager,1,1,1,1 access_mymach_fleet_periodic_maintenance_manager,periodic_maintenance_manager,model_mymach_fleet_periodic_maintenance,group_mymach_fleet_manager,1,1,1,1
access_mymach_fleet_fuel_index_user,mymach.fleet.fuel.index.user,model_mymach_fleet_fuel_index,group_mymach_fleet_user,1,0,0,0
access_mymach_fleet_fuel_index,mymach.fleet.fuel.index,model_mymach_fleet_fuel_index,base.group_user,1,1,1,1 access_mymach_fleet_fuel_index_manager,mymach.fleet.fuel.index.manager,model_mymach_fleet_fuel_index,group_mymach_fleet_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
14 access_mymach_fleet_handover_manager handover_manager model_mymach_fleet_handover group_mymach_fleet_manager 1 1 1 1
15 access_mymach_fleet_periodic_maintenance_user periodic_maintenance_user model_mymach_fleet_periodic_maintenance group_mymach_fleet_user 1 1 0 0
16 access_mymach_fleet_periodic_maintenance_manager periodic_maintenance_manager model_mymach_fleet_periodic_maintenance group_mymach_fleet_manager 1 1 1 1
17 access_mymach_fleet_fuel_index access_mymach_fleet_fuel_index_user mymach.fleet.fuel.index mymach.fleet.fuel.index.user model_mymach_fleet_fuel_index base.group_user group_mymach_fleet_user 1 1 0 1 0 1 0
18 access_mymach_fleet_fuel_index_manager mymach.fleet.fuel.index.manager model_mymach_fleet_fuel_index group_mymach_fleet_manager 1 1 1 1

View File

@@ -69,5 +69,32 @@
<field name="domain_force">[(1, '=', 1)]</field> <field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/> <field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/>
</record> </record>
<!-- RECORD RULES (Cezalar ve Giderler) -->
<record id="rule_mymach_fleet_fine_user" model="ir.rule">
<field name="name">Sürücüler kendi cezalarını görür</field>
<field name="model_id" ref="model_mymach_fleet_fine"/>
<field name="domain_force">[('driver_id', '=', user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('group_mymach_fleet_user'))]"/>
</record>
<record id="rule_mymach_fleet_fine_manager" model="ir.rule">
<field name="name">Yöneticiler tüm cezaları görür</field>
<field name="model_id" ref="model_mymach_fleet_fine"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/>
</record>
<!-- RECORD RULES (Periyodik Bakım) -->
<record id="rule_mymach_fleet_periodic_maintenance_user" model="ir.rule">
<field name="name">Sürücüler kendi araçlarının bakımlarını görür</field>
<field name="model_id" ref="model_mymach_fleet_periodic_maintenance"/>
<field name="domain_force">[('vehicle_id.driver_id', '=', user.partner_id.id)]</field>
<field name="groups" eval="[(4, ref('group_mymach_fleet_user'))]"/>
</record>
<record id="rule_mymach_fleet_periodic_maintenance_manager" model="ir.rule">
<field name="name">Yöneticiler tüm bakımları görür</field>
<field name="model_id" ref="model_mymach_fleet_periodic_maintenance"/>
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('group_mymach_fleet_manager'))]"/>
</record>
</data> </data>
</odoo> </odoo>