From 8d001c03f47b75ba7de49fec3a3bd376ec9e223a Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sun, 20 Sep 2020 12:15:42 +0200 Subject: [PATCH] functions.php: url parsing checks in distromatic pages to prevent security issues --- functions.php | 48 ++++++++++++++++++++++++++--------- images/openmamba-256x256.png | Bin 21108 -> 10208 bytes images/openmamba-64x64.png | Bin 2727 -> 2413 bytes 3 files changed, 36 insertions(+), 12 deletions(-) mode change 100644 => 100755 images/openmamba-64x64.png diff --git a/functions.php b/functions.php index c9c8f15..086b98f 100644 --- a/functions.php +++ b/functions.php @@ -63,17 +63,29 @@ function set_title($title) { parse_str($urlargs, $args); $newtitle = $title; if ($args['arch']) { - $newtitle = $args['arch'] . " - " . $newtitle; + if (preg_match('/^[a-zA-Z0-9._]*$/', $args['arch'])) { + $newtitle = urlencode($args['arch']) . " - " . $newtitle; + } else { + $newtitle = " Invalid request - " . $newtitle; + } } if ($args['tag']) { - $newtitle = $args['tag'] . " - " . $newtitle; + if (preg_match('/^[a-zA-Z0-9._-]*$/', $args['tag'])) { + $newtitle = urlencode($args['tag']) . " - " . $newtitle; + } else { + $newtitle = " Invalid request - " . $newtitle; + } } if ($args['pkg']) { if ($args['pkg'] == '_index') $newtitle = 'Index - ' . $newtitle; else { - $e = explode('.', $args['pkg']); - $newtitle = $e[0] . " - " . $e[1] . " - " . $newtitle; + if (preg_match('/^[a-zA-Z0-9._+-]*$/', $args['pkg'])) { + $e = explode('.', urlencode($args['pkg'])); + $newtitle = $e[0] . " - " . $e[1] . " - " . $newtitle; + } else { + $newtitle = " Invalid request - " . $newtitle; + } } } return $newtitle; @@ -267,10 +279,14 @@ function openmamba_distroquery_func() { else $outputlang = "en_US.UTF-8"; - $ret = "
"; - $ret .= "Loading, please wait...
"; - $ret .= "
 "; - $ret .= ""; + if (preg_match('/^[a-zA-Z0-9._\=\-\+\/\.\&\:]*$/', $urlargs)) { + $ret = "
"; + $ret .= "Loading, please wait...
"; + $ret .= "
 "; + $ret .= ""; + } else { + $ret = "" . __("Invalid request.", "responsive") . "
"; + } return $ret; } @@ -289,8 +305,12 @@ function openmamba_distromatic_func() { else $outputlang = "en_US.UTF-8"; - $ret = "" . __("Loading, please wait...", "responsive") . "
"; - $ret .= ""; + if (preg_match('/^[a-zA-Z0-9._\=\-\+\/\.\&\:]*$/', $urlargs)) { + $ret = "" . __("Loading, please wait...", "responsive") . "
"; + $ret .= ""; + } else { + $ret = "" . __("Invalid request.", "responsive") . "
"; + } return $ret; } @@ -303,8 +323,12 @@ function openmamba_showfile_func() { $urlargs = substr($_SERVER['REQUEST_URI'], $urlargspos + 1); } - $ret = "" . "Loading, please wait..." . "
"; - $ret .= ""; + if (preg_match('/^[a-zA-Z0-9._\=\-\+\/\.\&\:]*$/', $urlargs)) { + $ret = "" . "Loading, please wait..." . "
"; + $ret .= ""; + } else { + $ret = "" . __("Invalid request.", "responsive") . "
"; + } return $ret; } diff --git a/images/openmamba-256x256.png b/images/openmamba-256x256.png index ea3478a4e4dbe271d4ceacdc4e5cf47614b78708..59ca8bb04f573f8824116a4b9e5c3dfce390d323 100644 GIT binary patch literal 10208 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 literal 21108 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 diff --git a/images/openmamba-64x64.png b/images/openmamba-64x64.png old mode 100644 new mode 100755 index 6590caa1fcefff67c958cf4dcafcaf7ee63de8bc..45ca7fa2bf429236c2bed7a19a9c6e61c59e3650 GIT binary patch delta 2402 zcmV-o37z(*73~s`B!3BTNLh0L01m_e01m_fl`9S#000ReNklYDE z?!D)}L{-TYq1xG}2TkBi)!4Y0$`~guu8MSt!*Pwf2lHFZM^FB+p*v#^0g|o&EZDpt zkk@)-z6y&4oej(Y&KN?bAO}$0j-k<@|B&v^EtTcFy3*n#J_q0jf0=dK(PP1DKuZJ` z0b_lr_9)7$Vt;tSba&MH9SmOruw+B=$gH^DhH^KMpSoLv(jxFox1$f$l{9_iM};W` zAX4?s95>K$vm!rX=%2TrbRw*Ex}Ezg%l~ySm5MwEpuDbVzU%TFaBeCNq=vRCa(hjv z@j0(GSO=h@Ld?#B!h2Be0UWP}{X~$uZYQv^uH>yl)_+=?07R+^CdLEKbHL@chSHC= zig4SyrA;r`sD>SYP;K!PqihB}$BTQJLg1n5P}7f;;Wcbn0f=mvb$&b+_&Z!5D{`+cmxKR1*`i|$TVV9-9Gw5IqLL?83P zi6g-CV%Qj0cT05X_RsqlxOV-#+@N+`gzL@#Q=;f1AmD>-fEcP*R)?EjPxN8J0EDA+ zE*9Kvz=#wKA5rudfmr8bmF2sR+6cqZS!WoW<$sE~5p+fhKJ;=RXGHL#XBWQJ*8hV6 z0jQ`D^Y*NwMnwxe8go&3Iu;20%u8a@$2mko(ZcHm9stHCE30wkU{f0tipL<5s4{u9 zdTGP$JugLo2Z0v{1RxwOS|;$UHJ~K5KgynBu|DcN~Y3%96(2 z9<;+E9G!Eu;8p{U;_|RRku$x^FD98 z5pRv(;l$*!bT%HKCbaFZip~c<258&Y&VM_9`j{z;#*>wse8}(ah||1w|Cvsf900be zstc#|0V~%O2V2Io$3v?75gMCY9d7>6x)xr1 zyKq!O&88JQX>aYb+IB!y&pG)EXvudMdT4yRxMp!C8xK%f-tgbuFMqncxA6e64u6;T zst50L`!yb5qKI5{G5{*F%-R#tU#=_Nw%uCi13T928?YiI${> zec02UedIw)jc=&xLEz`T?}MWpE{vQtX!#4mXZC-zM^)bs037e=E)~eJasc$>WS=6FGbCSa!eo3HcX~V(Jxhr^AUcRg{pW z?RRTJ+v~i$?jJ{6J9kbf%zY$T<9iu9btH4{oXq)G4 zBeL$X)rgwe0H(BN);Yig3$3cep0_oaP7>w#Lt=CqfDsccw$TZ^T@z~l#DCggno-;I zUFivct7;Vh71?ZMC_@;;cK-1-03*l+Rx(%jSQ^R*E_`4q83SMx9WX#9Lq${CiAfjY zitSd}NC0EtbW2kMR&>4!xQ-^y^#-RW0JesV=xMf^OyI=hwr$CZR7D)4V09qDRT*t* zC?l9)z%~F~RpnK#K{;Tf5`Sgzg!@Y*7LVJmUw*8p8WG)VqY`1BrJ;gnpn;wpo8gN^OKr-h zn`_t4%T@S}rK}mioH%P^wW_1AZ1KjKejI@Eg`nH9oD<{va8c!N(0`i;C>tzoo}See z__3uXZK&!hOUa(E_W>AN8p~HLx1+GToh^#@QUIo$Yl?eOO$x zX32)QCZ$}xX+_g-_(S*eyZSgc*{3xwttk?6tD28PfDnE_T-$7 z(Qjza7P&pjF{eB5>;8`ioDUF0!qLKdQaB7LNS%qfH}#LU7a~@OM9ON=riZSN)eJn2c%vS`s7&;Pl>=?2*gdK5SgDmP>z@#3N#pT(Wv<%r#s`O8F*`-anausAN?(<`?}1+GlVyL6%) z6T_-?OB;v1PiT2zVn$Xhkn@b7-}B^PdU;pec-gwrfA6vpdAc(cjuzbjJS_0l*dq}B z>~wdmuzx+03n^Thic}R(iU)Nq%2l2!@B@{-V)R~{pL~B(x;A&pS>F4|?45!GDEH^L z$Wy6awe{uV$gD1zfN++mJIXbPaZwe%aDuTz?F0{PSkiDjV-5lT16iGj U+r^vxi2wiq07*qoM6N<$f&`7P1ONa4 delta 2719 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