Utils::ProcessArgs Class
class Utils::ProcessArgsRukuje argumentima procesa u školjkastoj navodnici. Više...
| Header: | #include <ProcessArgs> |
Statični javni članovi
| bool | expandMacros(QString *cmd, const Utils::ProcessArgs::FindMacro &findMacro, Utils::OsType osType) |
Dokumentacija funkcija članova
[static] bool ProcessArgs::expandMacros(QString *cmd, const Utils::ProcessArgs::FindMacro &findMacro, Utils::OsType osType)
Pretražuje makroe pomoću funkcije findMacro i izvodi in-place ekspanziju makroa (zamjenu) na nizu cmd, koji bi trebao sadržavati naredbu shell-a. osType definira sintaksu koja je kompatibilna s Bourne Shellom za Unix i kompatibilna s cmd za Windows.
Vraća false ako zamjena ne može biti izvedena sigurno, jer se naredba ne može parzirati – na primjer zbog pogrešaka u navodnicima.
Napomena: Ova je funkcija dizajnirana da bude sigurna za korištenje s expando objektima koji sadrže shell meta-znakove. Međutim, postavljanje expandosa na pogrešno mjesto u naredbi može osujetiti napore expandera da citira njihov sadržaj, što će vjerojatno rezultirati neispravnim izvršavanjem naredbe. Posebno, expando objekti koji sadrže nepouzdane podatke mogu izložiti krajnjeg korisnika aplikacije kritičnim ranjivostima injekcije shell koda. Kako biste izbjegli te probleme, slijedite smjernice u Unix security considerations i Windows security considerations. Općenito, bolja je ideja pokretati shell skripte nego sastavljati složene jednolinijske naredbe.
Napomene o Unixu
Eksplicitno podržane konstrukcije shell-a: \ '' "" {} () $(()) ${} $() ``
Implicitno podržani shell konstrukti: (())
Neprikladni shell konstrukti koji će uzrokovati probleme:
- Skraćena sintaksa
case $v in pat). Umjesto toga upotrijebitecase $v in (pat). - Bash-ov stil citiranja nizova pomoću
$""i$''.
Ostatak sintakse shell-a (uključujući bash sintaksu) ne bi trebao stvarati probleme i zanemaruje se.
Sigurnosni aspekti sustava Unix
- Bježanje iz naziva pomoću obrnutog kosog crtice smatra se greškom u navodnicima.
- Nemojte stavljati expandose u dvostruke citate pri zamjenama jer to može izazvati greške u parseru nekih shellova:
"${VAR:-%{macro}}" - Nemojte stavljati expandose u argumente naredbenog retka koji su ugniježđene shell naredbe. Na primjer, sljedeće je nesigurno:
su %{user} -c 'foo %{file}'Umjesto toga, makro možete dodijeliti u varijablu okruženja i proslijediti je u poziv:
file=%{file} su %{user} -c 'foo "$file"'
Napomene za Windows
Sve sintakse za navodnike koje podržava splitArgs() podržane su i ovdje. Dodatno, grupiranje naredbi pomoću zagrada se prepoznaje – ali imajte na umu da je parser puno stroži prema nezagradenim zagradama nego što je to sam cmd. Ostatak sintakse cmd ne bi trebao stvarati probleme i zanemaruje se.
Sigurnosni aspekti sustava Windows
- Bježanje od cirkumfлекса u expandu smatra se pogreškom u navodnicima.
- Zatvaranje dvostrukih navodnika neposredno prije expandosa i otvaranje dvostrukih navodnika neposredno nakon expandosa tretira se kao pogreška u navodnicima.
- Nemojte stavljati expandoe u ugniježđene naredbe. Na primjer, sljedeće je nesigurno:
for /f "usebackq" \%v in (`foo \%{file}`) do \@echo \%v - Vrijednost makroa ne smije sadržavati ništa što bi se moglo protumačiti kao proširenje varijable okruženja. Rješenje je zamijeniti sve znakove postojanjem fiksnom naredbom poput
\%PERCENT_SIGN\%i ubrizgatiPERCENT_SIGN=\%u okruženje shell-a. - Omogućavanje odgođenog proširivanja varijabli okruženja (
cmd /v:on) ne bi trebalo imati sigurnosnih implikacija. No, i dalje može uzrokovati probleme jer parser nije pripremljen na činjenicu da se doslovni uzvičnici u naredbi moraju eskapirati pomoću kape (circumflex), a postojeći kape moraju biti udvostručeni.
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.