sql substring_index - substring_index u sql-u - string funkcije u sql-u

Skrivene sigurnosne zamke SQL-a SUBSTRING_INDEX

Jedna funkcija, široka površina za napad

Zamislite ovo: gradite mikroservis koji obrađuje registracije korisnika. Negdje u toku rada, skraćujete email adresu koristeći substring_index u SQL-u da dobijete domenu. Uredan je, kratak i odlično funkcionira u pripremi. Zatim, u produkciji, logovi počinju da se pune punim imenima i domenama e-pošte u običnom tekstu, što je slučajno curenje iz naizgled bezopasnog SQL poziva.

To je problem: SQL substring_index je jedna od onih string funkcija u SQL-u koja izgleda sigurno sve dok se ne koristi na pogrešnom mjestu. U SaaS aplikacijama ili sistemima s više zakupaca koji obrađuju osjetljive podatke, zloupotreba može otkriti privatne zapise ili čak omogućiti eskalaciju privilegija bez pokretanja očiglednih upozorenja. U kritičnim okruženjima, posebno platformama s više zakupaca gdje jedan upit može poslužiti više korisnika, mala logička greška razdjelnika u substring_index u SQL-u može dovesti do izlaganja podataka između zakupaca, curenja informacija između izoliranih skupova podataka.

Razumijevanje SUBSTRING_INDEX u stvarnom kodu

U MySQL-u i MariaDB-u, SQL substring_index prima tri argumenta: string koji treba obraditi, delimiter i count. Vraća dio stringa prije ili poslije tog delimitera.

Obično se koristi u upitima aplikacija za brzo dijeljenje strukturiranih vrijednosti pohranjenih u jednom polju, na primjer, dijeljenje e-pošte na korisničko ime i domenu, izdvajanje poddomene iz URL-a ili izoliranje prefiksa iz kompozitnog ključa. Programeri često biraju substring_index u SQL-u umjesto parsiranja na strani aplikacije jer je to...cise, izbjegava dodatnu obradu izvan baze podataka i može se direktno koristiti u filterima, spajanjima i operacijama grupiranja.

Primjer: Izdvajanje korisničkog imena i domene iz e-maila

sql SELECT      SUBSTRING_INDEX(email, '@', 1) AS username,     SUBSTRING_INDEX(email, '@', -1) AS domain

OD korisnika;

Uobičajeni slučajevi upotrebe za substring_index u SQL-u uključuju:

  • Izdvajanje korisničkih imena za poruke dobrodošlice
  • Validacija email domena u odnosu na liste dozvoljenih/odbijenih adresa
  • Grupiranje korisnika po domeni u analitičkim upitima

jer SQL-ov substring_index je prevaracisBrzo i jednostavno, programeri ga često koriste direktno u string funkcijama u SQL-u za filtriranje, validaciju ili izvještavanje. Problem počinje kada su delimiteri ili brojači dinamički i dolaze iz korisničkog unosa.

Gdje sigurnost propada – Substring_index u SQL-u

Tri glavna obrasca rizika okreću se substring_index u SQL-u u obavezu, posebno u sistemima s više zakupaca ili sistemima s visokim ulozima:

Prekomjerna izloženost podacima

U dijeljenoj bazi podataka, jedna greška koja se razlikuje za jedan ili pogrešan broj razdjelnika može otkriti osjetljive detalje od drugih zakupaca ili nepovezanih korisnika.

sql -- Intended: first name only SELECT SUBSTRING_INDEX(full_name, ' ', 1); -- Bug: leaks full name and extra fields SELECT SUBSTRING_INDEX(full_name, ' ', 3); 

U CRM-u s više zakupaca, ovo bi moglo otkriti puna imena kupaca iz drugih kompanija u izvezenom CSV-u zakupca.

Nulti ili neispravan unos

Ako nedostaje delimiter ili je ulaz null, SQL-ov substring_index može vratiti cijelo polje. U kritičnim sistemima, ovo bi moglo otkriti interne ID-ove, spojene metapodatke ili vrijednosti za otklanjanje grešaka koje nisu namijenjene za vanjsku vidljivost.

Neovlašteni pristup u spajanjima ili podupitima

U konfiguracijama s više zakupaca, nepažljiva upotreba string funkcija u SQL-u za određivanje opsega zakupca može prekinuti izolaciju:

SELECT o.id, o.amount, t.name FROM orders o JOIN tenants t   ON SUBSTRING_INDEX(o.customer_ref, '-', 1) = t.tenant_code; 

If referenca_kupca je nedosljedno formatiran ili njime upravlja korisnik, Zakupac A bi mogao preuzeti narudžbe Zakupca B. U platnim sistemima ili zdravstvenim platformama, ovo postaje direktno kršenje politika odvajanja podataka.

Primjer rizika za više zakupaca: Zamislite SaaS platformu za fakturisanje gdje referenca_kupca kodira ID zakupca prije crtice (ID NARUDŽBE ZAKUPACA). Ako zlonamjerni korisnik pošalje referencu narudžbe s ID-om drugog zakupca, ali s važećim brojem narudžbe, a spajanje koristi substring_index u SQL-u bez validacije, mogli su pristupiti podacima faktura koje pripadaju potpuno drugoj organizaciji.

Pravi vektori napada u CI/CD i otvoreni kod

Zloupotreba SQL substring_index Nije samo greška juniora-developera; to se vidi u:

  • ORM upiti s dinamičkim razdjelnicima
  • Pohranjene procedure u dodacima otvorenog koda
  • Inline SQL koji direktno spaja parametre zahtjeva

Kako nesiguran kod dospijeva u produkciju:

Developer writes query using substring_index in sql       ↓   Code is committed and pushed to the repository       ↓   Automated build runs (no SQL security checks)       ↓   Code review focuses on business logic, not string functions in SQL       ↓   Changes are merged into the main branch       ↓   Application is deployed to production   

Bez automatiziranih provjera nesigurnih string funkcija u SQL-u, ovi rizici mogu proći nezapaženo i stići do produkcije, potencijalno uzrokujući curenje osjetljivih podataka od prvog dana.

Detekcija u SAST/CI-CD

Najsigurniji način za rješavanje rizika substring_index u SQL-u obrasci su da ih blokiraju prije spajanja.

Pravila detekcije trebaju obuhvatiti:

  • Korištenje SQL substring_index sa razdjelnicima ili brojevima iz parametara zahtjeva
  • Nedostaje validacija razdjelnika

Primjer minimalnog pravila:

yaml rules:   - id: mysql-substring-index-dynamic-delimiter     languages: [sql]     message: Avoid SUBSTRING_INDEX with dynamic delimiter or count.     severity: error 

Pipeline korak:

yaml  - name: SAST – SQL rules   run: semgrep --config semgrep-sql.yml --error 

Skeniranjem nesigurnih string funkcija u SQL-u tokom PR provjera, uklanjate nagađanje iz pregleda koda.

Strategije ublažavanja za programere

Hvatanje rizične upotrebe SQL substring_index Uključivanje u preglede ili skeniranja je dobro, ali prava pobjeda nije njegovo uvođenje u prvom planu. Mnogi sigurnosni incidenti se događaju jer se programeri oslanjaju na poznate prečice bez razmatranja graničnih slučajeva.

Evo kako spriječiti probleme pri radu sa substring_index u SQL-u ili slične string funkcije u SQL-u:

Validirajte pozicije razdjelnika prije izvršenja
Nemojte samo pretpostavljati da delimiter postoji i da je na pravom mjestu. U sistemima s više zakupaca, jedan neočekivani delimiter u identifikatoru može otvoriti pristup podacima drugog zakupca.

sql  SELECT      CASE          WHEN LOCATE('@', email) > 0          THEN SUBSTRING_INDEX(email, '@', 1)          ELSE NULL      END AS username FROM users; 
  1. Provjerite očekivanu dužinu izlaza
    Postavite sigurne granice. Ako je rezultat podniza prekratak ili predug, tretirajte ga kao nevažeći.
  2. Sanitizirajte i kodirajte podatke prije upotrebe
    Uklonite neželjene razdjelnike iz korisničkog unosa prije nego što uopće dođe do SQL-a
  3. izbjeći substring_index u SQL-u u sigurnosno kritičnoj logici
    Nikada ga ne koristite za provjeru dozvola, izolaciju korisnika ili bilo šta što kontrolira pristup osjetljivim podacima. Parsiranje nije sigurnosna granica.
  4. Premjestite parsiranje na sloj aplikacije. Logika na strani aplikacije vam daje bolju kontrolu nad validacijom, rukovanjem greškama i jediničnim testovima.
python  def safe_split_email(email):     if '@' not in email:         raise ValueError("Invalid email")     username, domain = email.split('@', 1)     if '.' not in domain:         raise ValueError("Invalid domain")     return username, domain 

Tretiranjem string funkcija u SQL-u kao nepouzdanih kodnih putanja, smanjujete rizik od bilo kakve logičke greške.

Integracija sa sigurnosnim alatima 

Čak ni vješti timovi ne mogu se oslanjati isključivo na ručne preglede; rizični obrasci poput nesigurnih SQL substring_index upotreba može proći neočekivano, posebno u velikim kodnim bazama ili pri radu s kodom treće strane.

Zašto integrirati alate poput Xygenija:

  • Pokriva i kod otvorenog koda i vlasnički kod: osiguravanje da se ranjivosti ne kriju u paketima dobavljača ili naslijeđenim modulima.
  • Detektira nesigurne obrasce u SQL skriptama i kodu aplikacije: pronalaženje substring_index u SQL-u zloupotreba čak i kada je ugrađena u stringove unutar Pythona, Jave ili Node.js-a.
  • Integrira se direktno u CI/CD pipelines: izgradnje automatski ne uspijevaju ako su nesigurne string funkcije u SQL-u su otkriveni.
  • Pruža praktične savjete za sanaciju: prikazivanje programerima tačno koji dio upita je rizičan, zašto i kako ga popraviti.

Primjer radnog procesa sa Xygeni-jem u CI/CD bezbjednost:

Source → Commit → Build          → SQL Scan (Xygeni)          → Fail build if violations found          → Remediation & re-scan          → Merge & Deploy 

Kontinuirano skeniranje prije implementacije je ključno, osigurava da rizične upotrebe sql substring_index se otkrivaju ne samo tokom početnog razvoja, već i u kasnijim ažuriranjima, refaktorisanjima i promjenama zavisnosti. Ovaj proaktivni pristup znači da se ranjivosti eliminišu prije nego što ikada dođu do produkcije.

Završne informacije za programere – O substring_index u SQL-u

Evo zaključka:

  • SQL substring_index nije inherentno loše, ali loša upotreba ga pretvara u tiho curenje podataka.
  • svaki substring_index u SQL-u Poziv u sigurnosno osjetljivoj putanji treba tretirati kao sumnjiv dok se ne dokaže sigurnost.
  • Sve string funkcije u SQL-u mogu biti opasne u kontekstima gdje su granice podataka ili dozvole bitne; uvijek ih tretirajte kao potencijalno opasne u osjetljivim okruženjima, čak i ako izgledaju jednostavne ili bezopasne.

Sljedeći praktični koraci za razvojne timove:

  1. Revidirajte svoju kodnu bazu za bilo kakvu upotrebu SQL substring_index u spajanjima, podupitima ili logici kontrole pristupa.
  2. dodati SAST pravila za otkrivanje dinamičkih razdjelnika i neprovjerenog unosa u string funkcije u SQL-u.
  3. Prebacivanje parsiranja na sloj aplikacije gdje god je to moguće.
  4. Pokreni kontinuirano skeniranje s alatima poput Xygenija za otkrivanje nesigurne upotrebe prije implementacije.

Sigurnost se ne svodi samo na krpljenje rupa nakon što se to dogodi; radi se o uključivanju prevencije u radni proces. Ako liječite SQL substring_index i druge string funkcije u SQL-u s istim oprezom kao i sirovi korisnički unos, izbjeći ćete pretvaranje praktičnog pomoćnika u najopasniju liniju u vašem upitu.

sca-tools-software-alati-za-analizu-sastava
Prioritizirajte, sanirajte i osigurajte softverske rizike
Nabavite svoj besplatni račun.
Nije potrebna kreditna kartica.

Osigurajte svoj razvoj i isporuku softvera

sa Xygeni paketom proizvoda