فهرست منبع

fix: forbidden filtering

Jonathan Kelley 3 سال پیش
والد
کامیت
4954079212
1فایلهای تغییر یافته به همراه8 افزوده شده و 1 حذف شده
  1. 8 1
      packages/desktop/src/protocol.rs

+ 8 - 1
packages/desktop/src/protocol.rs

@@ -22,10 +22,17 @@ pub(super) fn desktop_handler(request: &Request, asset_root: Option<PathBuf>) ->
             .body(dioxus_interpreter_js::INTERPRETER_JS.as_bytes().to_vec())
     } else {
         let asset_root = asset_root
-            .unwrap_or_else(|| get_asset_root().unwrap_or_else(|| Path::new(".").to_path_buf()));
+            .unwrap_or_else(|| get_asset_root().unwrap_or_else(|| Path::new(".").to_path_buf()))
+            .canonicalize()?;
 
         let asset = asset_root.join(trimmed).canonicalize()?;
 
+        if !asset.starts_with(asset_root) {
+            return ResponseBuilder::new()
+                .status(StatusCode::FORBIDDEN)
+                .body(String::from("Forbidden").into_bytes());
+        }
+
         if !asset.exists() {
             return ResponseBuilder::new()
                 .status(StatusCode::NOT_FOUND)