UiServer (ix::HttpServer) : GET/HEAD, / -> index.html, MIME, en-têtes no-store/nosniff, vérification exclusive du port sous Windows. Chemins : décodage unique, refus de .., ., fichiers cachés, antislash, octet nul, : (lecteur ou flux NTFS), puis confinement vérifié par weakly_canonical. build_ui_url, build_core_ws_url, open_browser (http/https uniquement). 14 cas de test dont 12 tentatives d'évasion. Écrit par un subagent (DeepSeek V4.1 Flash), relu ; refus de : étendu aux flux NTFS.
27 lines
990 B
C++
27 lines
990 B
C++
// SPDX-License-Identifier: MPL-2.0
|
|
//
|
|
// Tests de la validation des URL avant ouverture du navigateur. Aucun navigateur n'est
|
|
// réellement ouvert.
|
|
#include "sequa/studio/host/browser.hpp"
|
|
|
|
#include <doctest/doctest.h>
|
|
|
|
using namespace sequa::studio::host;
|
|
|
|
TEST_CASE("Web : is_openable_url n'accepte que http et https")
|
|
{
|
|
CHECK(is_openable_url("http://127.0.0.1:9180/?core=x"));
|
|
CHECK(is_openable_url("https://example.com/chemin?x=1#f"));
|
|
CHECK(is_openable_url("HTTP://EXAMPLE.COM/"));
|
|
CHECK(is_openable_url("HtTpS://example.com/"));
|
|
|
|
CHECK_FALSE(is_openable_url(""));
|
|
CHECK_FALSE(is_openable_url("file:///C:/Windows/win.ini"));
|
|
CHECK_FALSE(is_openable_url("javascript:alert(1)"));
|
|
CHECK_FALSE(is_openable_url("ftp://example.com/"));
|
|
CHECK_FALSE(is_openable_url("http:/pas-de-double-slash"));
|
|
CHECK_FALSE(is_openable_url("http://x\ncommande"));
|
|
CHECK_FALSE(is_openable_url("http://x\ttab"));
|
|
CHECK_FALSE(is_openable_url("http://\x01"));
|
|
}
|