Utils::ProcessArgs Class
class Utils::ProcessArgsObrađuje argumente procesa u navodnicima naloga. 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 sigurno izvršena, 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 ekspandera da citira njihov sadržaj, što će vjerojatno rezultirati neispravnom izvedbom naredbe. Posebno, expandosi koji sadrže nepouzdane podatke mogli bi izložiti krajnjeg korisnika aplikacije kritičnim ranjivostima injekcije shell koda. Kako biste izbjegli ove probleme, slijedite smjernice u Unix security considerations i Windows security considerations. Općenito, bolja je ideja pozivati shell skripte nego sastavljati složene jednolinijske naredbe.
Napomene o Unixu
Eksplicitno podržani konstrukti shell-a: \ '' "" {} () $(()) ${} $() ``
Implicitno podržani shell konstrukti: (())
Neprikladni shell konstrukti koji će uzrokovati probleme:
- Skraćena sintaksa
case $v in pat). Umjesto toga koristitecase $v in (pat). - Bash-ov stil citiranja nizova pomoću
$""i$''.
Ostatak sintakse shell-a (uključujući bash sintaksu) ne bi trebao uzrokovati probleme i zanemaruje se.
Sigurnosni aspekti sustava Unix
- Bježanje od crtice-nagiba u expandu smatra se pogreškom u navodnicima.
- Nemojte stavljati expandose u dvostruče citate 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 pri pozivu:
file=%{file} su %{user} -c 'foo "$file"'
Napomene za Windows
Sva sintaksa za navodnike koju podržava splitArgs() podržana je i ovdje. Dodatno, grupiranje naredbi pomoću zagrada je prepoznato – 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 cirkumflekse u expandu smatra se pogreškom u navodnicima.
- Zatvaranje dvostrukih navodnika neposredno prije expandoa i otvaranje dvostrukih navodnika neposredno nakon expandoa 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 makra 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 (^), a postojeći kape moraju biti dvostruki.
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.