Digitális és informatikai

CSV-export képletkezdő szöveggel: az idézőjel önmagában kevés

Egy ügyféltől érkező megjegyzés táblázatkezelőben képletté válhat. A mezőszétválasztás és a képletértelmezés külön kockázat; az export és az újranyitás együtt tesztelendő.

Dajka Gábor6 perc olvasás

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őTeszttartalomElvárt értelmezés
Megjegyzés=7+5Négy karakterből álló szöveg, nem a 12-es eredmény
Megjegyzéspiros, nagyEgyetlen szövegmező, a belső vessző megmarad
Megjegyzés"igen"A két eredeti idézőjel is megmarad a cella tartalmában
Mennyiség-12Ellenő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.

További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás