Egy webáruházi megjegyzés szöveges adat a rendelési rendszerben. Ugyanez a tartalom egy CSV-export megnyitásakor képletként értelmeződhet, ha a fogadó táblázatkezelő így kezeli a mező elejét. Az export attól még lehet szabályos CSV, hogy a későbbi megnyitás veszélyes vagy félrevezető viselkedést okoz.
Az ellenőrzéshez saját, ártalmatlan megjegyzéseket használunk, amelyeknek előre ismerjük a tartalmát és a típusát. Így külön megfigyelhető, hogy a mezőhatárolás romlik el, vagy a szöveget értelmezi át a fogadó alkalmazás.
Két eltérő feldolgozási lépést válassz szét
A CSV olvasója először sorokra és mezőkre bontja az állományt. Ehhez elválasztójelet és idézőjelezési szabályt használ. A táblázatkezelő ezután dönthet arról, hogy egy mező szám, dátum, szöveg vagy képlet.
A =1+1 tartalmú ügyfélmegjegyzésnél az elvárt eredmény a négy karakterből álló szöveg megőrzése. Képletértelmezés esetén a cellában ehelyett a 2 eredmény jelenhet meg. Ilyenkor az eredeti jelentés már megváltozott, pedig az export oszlopai akár tökéletesen a helyükön maradtak.
Az OWASP CSV Injection útmutatója hangsúlyozza a képletkezdő karaktereket és a táblázatkezelők közötti eltéréseket. Arra is figyelmeztet, hogy a mentés és újranyitás egy korábban alkalmazott védelmet megváltoztathat. Ezért nincs minden fogyasztó számára egyformán biztonságos, általános CSV-tisztítás.
Az idézőjelezést a saját céljának megfelelően kezeld
Egy vesszőt tartalmazó „piros, nagy” megjegyzés idézőjelezése arra szolgál, hogy egyetlen mező maradjon. Ettől a mező típusa még nincs feltétlenül szövegként rögzítve a későbbi alkalmazás számára.
A saját exportellenőrzésedben ezért külön teszteld az oszlopszámot és a cellák értelmezését. Egy próbafájlban szerepelhet közönséges szöveg, vesszőt tartalmazó szöveg, idézőjelet tartalmazó szöveg, a fenti ártalmatlan képletkezdet és egy szabályos negatív szám. A várt értéket minden oszlopnál előre rögzítsd.
A negatív mennyiség például visszárus üzleti adat lehet. Egy ellenőrzött számoszlop −12 értékét másként kell kezelni, mint egy szabad szövegként érkező, műveletre hasonlító tartalmat. A mező szerepét az export sémája mondja meg.
Válassz a felhasználáshoz illő átadást
Gépi adatcserénél olyan formátum és séma hasznos, amelyben a szövegmező szöveg marad. A JSON formázóval a dokumentum szerkezete ellenőrizhető, de az üzleti adattípusokat a fogadó rendszernek is be kell tartania.
Táblázatos emberi ellenőrzéshez egy natív munkafüzetben a megbízható exportkód külön szöveges cellatípust írhat. CSV-nél a fogadó alkalmazás dokumentált szöveges importját kell tesztelni. Egy utólagos, minden mező elé tett karakter módosíthatja a valódi adatot, ezért az eredeti gépi exportot és az emberi megtekintésre készített változatot külön érdemes tárolni.
A CSV–JSON átváltó a formátumváltásban segít. Önmagában egy átváltás nem minősül minden későbbi táblázatkezelőre kiterjedő biztonsági auditnak.
A próba az újranyitással zárul
A saját támogatott alkalmazásodban importáld a tesztadatot, ellenőrizd a megjelenő értéket és a cella típusát, majd mentsd és nyisd meg újra. A változat és az importbeállítás kerüljön a tesztnaplóba. Ugyanezt ismételd meg minden ténylegesen támogatott fogadó rendszerrel.
Sikeres tesztnél a megjegyzés tartalma azonos marad, az elválasztójelek nem hoznak létre új oszlopot, és a szöveg nem válik végrehajtandó képletté. A nyers ügyfélmegjegyzést ne írd felül a megtekintési export kedvéért; a két feladat külön adatpéldányon kezelhető.
Az értéket és a típust ugyanabban a próbában ellenőrizd
Egy saját exportpróbához előre írd le ezt a négy mezőt. A megjegyzések szövegek, a mennyiség ellenőrzött szám. A Teszttartalom oszlop a megőrzendő karaktereket mutatja. Az idézőjeles próbában a két idézőjel is az adat része; az export CSV-határoló idézőjelei ezen felül jelennek meg.
| Mező | Teszttartalom | Elvárt értelmezés |
|---|---|---|
| Megjegyzés | =7+5 | Négy karakterből álló szöveg, nem a 12-es eredmény |
| Megjegyzés | piros, nagy | Egyetlen szövegmező, a belső vessző megmarad |
| Megjegyzés | "igen" | A két eredeti idézőjel is megmarad a cella tartalmában |
| Mennyiség | -12 | Ellenőrzött negatív szám, ha ezt engedi a mező sémája |
Az első sor képletként értelmezve 12-t adna, miközben a várt szöveg hossza négy. Az oszlopszám ettől még helyes maradna. A vesszős megjegyzésnél más a próba: a 11 karakter egyetlen mezőbe tartozik. Ha két oszlopra esik szét, először a mezőhatárolást javítsd. Ha egy mező marad, de az első sor képletté válik, a szövegtípust biztosító átadást kell rendezni.
A mínuszjel megjelenítésére is figyelj: a táblázat utolsó sorában a szokásos ASCII kötőjel-mínusz szerepel. A tipográfiai − más karakter. A próbafájlban pontosan azt az értéket használd, amely az exportban is előfordul; pusztán a képernyő hasonló képe nem igazolja az egyezést.
Ugyanezt a négy sort mentés és újranyitás után is ellenőrizd. Ha a célalkalmazás nem tudja stabilan megőrizni a megjegyzést szövegként, az emberi megtekintéshez szövegtípussal előállított munkafüzetet válassz, és a gépi adatcserét az eredeti értékekkel tartsd meg. A CSV-injekció OWASP-leírása a mezőhatár és a későbbi képletértelmezés együttes vizsgálatát indokolja.
Az adat idézőjelét és a CSV idézőjelét külön számold
A táblázat harmadik próbájában a megőrzendő szöveg "igen", a két idézőjellel együtt hat karakter. Az RFC 4180 szerinti, vesszővel határolt CSV-ben ennek idézőjelezett mezője """igen""" lehet: a két belső idézőjel megkettőződik, a teljes mezőt pedig még egy külső idézőjelpár fogja közre. A kódolt mező így tíz karakter, a sorvége nélkül.
Visszaolvasás után ismét a hatkarakteres adatot kell kapnod, egyetlen cellában. A többlet idézőjelek a fájl szerkezetéhez tartoznak. A CSV mezőidézőjelezésének leírása ezt a megkettőzési szabályt rögzíti. Ugyanez a szabályos idézőjelezés a képletkezdő mező későbbi típusfelismerését továbbra sem dönti el; azt a célalkalmazásban külön ellenőrizd.
Gyakori kérdések
Elég dupla idézőjelbe tenni minden mezőt?
A CSV mezőhatárait ettől szabályosan kezelheted, de a táblázatkezelő későbbi típusfelismerése külön folyamat. A tényleges fogyasztóval kell tesztelni.
Minden mínuszjellel kezdődő adat hibás?
Nem. Számoszlopban a negatív érték szabályos lehet. Szabad szövegnél és ellenőrzött numerikus mezőnél eltérő validáció szükséges.
A megnyitáskor kapott figyelmeztetés kikapcsolható a könnyebb használatért?
Az export hibáját ne a védelem kikapcsolásával kezeld. A formátumot, az adattípust és az importfolyamatot kell rendezni.
Záró tudáspróba
Válassz kérdésenként egy választ. A megoldások ellenőrzése után minden helyes válaszért 1 pontot adj magadnak; a hibás, kihagyott vagy több válasszal megjelölt kérdés 0 pont. Összesen 0–3 pont szerezhető.
1. A megjegyzés eredeti tartalma =7+5. Mi a megfelelő visszaolvasott eredmény?
- A) A 12-es szám.
- B) Négy karakterből álló szöveg, változatlan tartalommal.
- C) Üres cella, mert minden ilyen mezőt törölni kell.
2. A piros, nagy tartalom két oszlopba kerül. Melyik ellenőrzés bukott meg?
- A) A mezőhatárolásé.
- B) A negatív szám tartományáé.
- C) Biztosan a képletek tiltásáé.
3. Az első import megfelelő. Miért kell mentés után újranyitni a fájlt?
- A) Mert minden alkalmazás biztosan megváltoztatja az adatot.
- B) Mert az újranyitás helyettesíti a cellatípus ellenőrzését.
- C) Mert a mentés és ismételt import más típusfelismerést vagy védelmi viselkedést eredményezhet.
Megoldások és pontszám
1. B. A megjegyzés szövegmező. Az összeadás végrehajtása megváltoztatná a jelentését; az eredeti négy karaktert kell megőrizni.
2. A. A vessző a megjegyzés része, ezért egyetlen mezőben kell maradnia. Ez a CSV szerkezeti kezelése, külön a képletértelmezéstől.
3. C. A támogatott alkalmazás teljes használati útját kell ellenőrizni. Egy első megnyitás eredménye nem bizonyítja a mentés utáni állapotot.
3 pont: A szerkezetet, a szöveges jelentést és az újranyitást is vizsgáltad. A négy próba a támogatott alkalmazás változatával együtt kerüljön a tesztnaplódba.
2 pont: Az 1. kérdéshez a =7+5 mező szerepét, a 2.-hoz a vesszős megjegyzést, a 3.-hoz az újranyitás ellenőrzését nézd át.
0–1 pont: Először írd fel minden tesztmező elvárt típusát és tartalmát. Import után ezeket ellenőrizd egyenként; az oszlopok számának egyezése mellett a cellák jelentését is vizsgáld.