Whiz Tools

Únikový nástroj pro URL řetězce

Nástroj pro únik řetězců URL

Úvod

V oblasti webového vývoje a internetové komunikace hrají URL (Uniform Resource Locators) zásadní roli při identifikaci zdrojů na webu. Nicméně, URL mají omezení na znaky, které mohou obsahovat. Některé znaky mají speciální význam, zatímco jiné jsou pro použití v URL nebezpečné kvůli možnosti nesprávného výkladu nebo poškození během přenosu.

Kódování URL, také známé jako procentní kódování, je mechanismus pro převod speciálních znaků do formátu, který lze přenášet přes internet. Tento nástroj vám umožňuje zadat řetězec URL a uniknout speciálním znakům, čímž zajišťuje, že URL je platná a může být správně interpretována webovými prohlížeči a servery.

Pochopení kódování URL

Co je kódování URL?

Kódování URL zahrnuje nahrazení nebezpečných znaků ASCII znakem %, za kterým následují dva hexadecimální číslice představující ASCII kód znaku. Zajišťuje, že informace jsou přenášeny přes internet bez změny.

Například, znak mezery ' ' je nahrazen %20.

Proč je kódování URL nezbytné?

URL mohou být odesílány přes internet pouze pomocí znakové sady ASCII. Vzhledem k tomu, že URL často obsahují znaky mimo tuto sadu, musí být převedeny do platného formátu ASCII. Kódování URL zaručuje, že speciální znaky nezpůsobí neúmyslné efekty nebo chyby v webových požadavcích.

Znaky, které potřebují kódování

Podle specifikace RFC 3986 musí být následující znaky rezervovány v URL a musí být procentně kódovány, pokud mají být použity doslovně:

  • Obecné oddělovače: :, /, ?, #, [, ], @
  • Pod-oddělovače: !, $, &, ', (, ), *, +, ,, ;, =

Kromě toho musí být jakékoli znaky mimo ASCII, včetně znaků v Unicode, kódovány.

Jak funguje kódování URL?

Proces kódování

  1. Identifikujte speciální znaky: Analyzujte řetězec URL a identifikujte znaky, které nejsou neomezenými znaky ASCII (písmena, číslice, -, ., _, ~).

  2. Převeďte na ASCII kód: Pro každý speciální znak získejte jeho kódovou pozici ASCII nebo Unicode.

  3. Převeďte na sekvenci bytů UTF-8 (pokud je to nutné): Pro znaky mimo ASCII zakódujte znak do jednoho nebo více bytů pomocí kódování UTF-8.

  4. Převeďte na hexadecimální: Převeďte každý byte na jeho dvoucifernou hexadecimální ekvivalent.

  5. Předcházejte symbolem procenta: Před každým hexadecimálním bytem přidejte znak %.

Příklad kódování

  • Znak: ' ' (mezera)

    • ASCII kód: 32
    • Hexadecimální: 20
    • URL kódováno: %20
  • Znak: 'é'

    • Kódování UTF-8: 0xC3 0xA9
    • URL kódováno: %C3%A9

Okrajové případy, které je třeba zvážit

  • Znaky Unicode: Ne-ASCII znaky musí být zakódovány v UTF-8 a poté procentně kódovány.

  • Již kódované procentní znaky: Procentní znaky, které jsou součástí procentních kódování, nesmí být znovu kódovány.

  • Rezervované znaky v dotazovacích řetězcích: Některé znaky mají speciální význam v dotazovacích řetězcích a měly by být kódovány, aby se zabránilo změně struktury.

Dekódování URL

Co je dekódování URL?

Dekódování URL je opačný proces kódování URL. Převádí procentně kódované znaky zpět do jejich původní podoby, čímž činí URL čitelnou a interpretovatelnou pro lidi a systémy.

Proces dekódování

  1. Identifikujte sekvence procentního kódování: Najděte všechny symboly % následované dvěma hexadecimálními číslicemi v řetězci URL.

  2. Převeďte hexadecimální na byty: Přeložte každou hexadecimální hodnotu na odpovídající byte.

  3. Dekódujte byty UTF-8 (pokud je to nutné): Pro vícibytné sekvence spojte byty a dekódujte je pomocí kódování UTF-8, abyste získali původní znak.

  4. Nahraďte kódované sekvence: Nahradíte procentně kódované sekvence dekódovanými znaky.

Příklad dekódování

  • Kódováno: hello%20world

    • %20 se překládá na mezeru ' '
    • Dekódováno: hello world
  • Kódováno: J%C3%BCrgen

    • %C3%A4 se překládá na 'ü' v UTF-8
    • Dekódováno: Jürgen

Důležitost dekódování URL

Dekódování URL je nezbytné při zpracování uživatelského vstupu z URL, čtení dotazovacích parametrů nebo interpretaci dat přijatých z webových požadavků. Zajišťuje, že informace extrahované z URL jsou ve své správné, zamýšlené podobě.

Případové studie

Webový vývoj

  • Dotazovací parametry: Kódování uživatelského vstupu v dotazovacích parametrech, aby se předešlo chybám nebo bezpečnostním zranitelnostem.

  • Parametry cesty: Bezpečné zahrnutí dynamických dat do cest URL.

Přenos dat

  • API a webové služby: Zajištění, že data odesílaná do API jsou správně formátována.

  • Mezinárodní standardizace: Podpora URL s znaky z různých jazyků.

Bezpečnost

  • Prevence útoků pomocí injekce: Kódování vstupů pro zmírnění rizika skriptování mezi weby (XSS) a dalších útoků pomocí injekce.

Alternativy

I když je kódování URL nezbytné, existují scénáře, kde mohou být jiné metody kódování vhodnější:

  • Kódování Base64: Používá se pro kódování binárních dat v URL nebo když je vyžadována vyšší hustota informací.

  • Kódování UTF-8 bez procentního kódování: Některé systémy používají přímo kódování UTF-8, ale to může vést k problémům, pokud není správně zpracováno.

Zvažte specifika vaší aplikace, abyste si vybrali nejvhodnější metodu kódování.

Historie

Kódování URL bylo zavedeno s ranými specifikacemi standardů URL a URI (Uniform Resource Identifier) v 90. letech. Potřeba konzistentního způsobu kódování speciálních znaků vznikla z různorodých systémů a znakových sad používaných po celém světě.

Klíčové milníky zahrnují:

  • RFC 1738 (1994): Definoval URL a zavedl procentní kódování.

  • RFC 3986 (2005): Aktualizoval syntaxi URI, upřesnil pravidla pro kódování.

V průběhu času se kódování URL stalo nedílnou součástí webových technologií, zajišťující spolehlivou komunikaci napříč různými systémy a platformami.

Příklady kódu

Zde jsou příklady, jak provádět kódování URL v různých programovacích jazycích:

' Příklad Excel VBA
Function URLEncode(ByVal Text As String) As String
    Dim i As Integer
    Dim CharCode As Integer
    Dim Char As String
    Dim EncodedText As String

    For i = 1 To Len(Text)
        Char = Mid(Text, i, 1)
        CharCode = AscW(Char)
        Select Case CharCode
            Case 48 To 57, 65 To 90, 97 To 122, 45, 46, 95, 126 ' 0-9, A-Z, a-z, -, ., _, ~
                EncodedText = EncodedText & Char
            Case Else
                If CharCode < 0 Then
                    ' Zpracování znaků Unicode
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

' Použití:
' =URLEncode("https://example.com/?name=Jürgen")
% Příklad MATLAB
function encodedURL = urlEncode(url)
    import java.net.URLEncoder
    encodedURL = char(URLEncoder.encode(url, 'UTF-8'));
end

% Použití:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Příklad Ruby
require 'uri'

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = URI::DEFAULT_PARSER.escape(url)
puts encoded_url
## Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Příklad Rust
use url::form_urlencoded;

fn main() {
    let url = "https://example.com/path?query=hello world&name=Jürgen";
    let encoded_url = percent_encode(url);
    println!("{}", encoded_url);
    // Výstup: https://example.com/path%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
}

fn percent_encode(input: &str) -> String {
    use percent_encoding::{utf8_percent_encode, NON_ALPHANUMERIC};
    utf8_percent_encode(input, NON_ALPHANUMERIC).to_string()
}
## Příklad Python
import urllib.parse

url = 'https://example.com/path?query=hello world&name=Jürgen'
encoded_url = urllib.parse.quote(url, safe=':/?&=')
print(encoded_url)
## Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Příklad JavaScript
const url = 'https://example.com/path?query=hello world&name=Jürgen';
const encodedURL = encodeURI(url);
console.log(encodedURL);
// Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
// Příklad Java
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class URLEncodeExample {
    public static void main(String[] args) throws Exception {
        String url = "https://example.com/path?query=hello world&name=Jürgen";
        String encodedURL = URLEncoder.encode(url, StandardCharsets.UTF_8.toString());
        // Nahraďte "+" za "%20" pro mezery
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Výstup: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// Příklad C#
using System;
using System.Net;

class Program
{
    static void Main()
    {
        string url = "https://example.com/path?query=hello world&name=Jürgen";
        string encodedURL = Uri.EscapeUriString(url);
        Console.WriteLine(encodedURL);
        // Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
    }
}
<?php
// Příklad PHP
$url = 'https://example.com/path?query=hello world&name=Jürgen';
$encodedURL = urlencode($url);
echo $encodedURL;
// Výstup: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%C3%BCrgen
?>
// Příklad Go
package main

import (
    "fmt"
    "net/url"
)

func main() {
    urlStr := "https://example.com/path?query=hello world&name=Jürgen"
    encodedURL := url.QueryEscape(urlStr)
    fmt.Println(encodedURL)
    // Výstup: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello+world%26name%3DJ%25C3%25BCrgen
}
// Příklad Swift
import Foundation

let url = "https://example.com/path?query=hello world&name=Jürgen"
if let encodedURL = url.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) {
    print(encodedURL)
    // Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen
}
## Příklad R
url <- "https://example.com/path?query=hello world&name=Jürgen"
encodedURL <- URLencode(url, reserved = TRUE)
print(encodedURL)
## Výstup: https://example.com/path?query=hello%20world&name=J%C3%BCrgen

Poznámka: Výstup se může mírně lišit v závislosti na tom, jak každý jazyk zpracovává rezervované znaky a mezery (např. kódování mezer jako %20 nebo +).

SVG diagram procesu kódování URL

Proces kódování URL Původní URL Identifikujte speciální znaky Kódování URL Příklad: Vstup: https://example.com/über uns Výstup: https://example.com/%C3%BCber%20uns

Bezpečnostní úvahy

Správné kódování a dekódování URL jsou kritické pro bezpečnost:

  • Prevence útoků pomocí injekce: Kódování uživatelského vstupu pomáhá zabránit vykonávání škodlivého kódu, čímž zmírňuje rizika jako skriptování mezi weby (XSS) a SQL injekce.

  • Integrita dat: Zajišťuje, že data jsou přenášena bez změn nebo poškození.

  • Dodržování standardů: Dodržování kódovacích standardů se vyhýbá problémům s interoperabilitou mezi systémy.

Odkazy

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Co je kódování URL a jak funguje? https://www.urlencoder.io/learn/
  3. Percentní kódování: https://en.wikipedia.org/wiki/Percent-encoding
  4. Standard URL: https://url.spec.whatwg.org/
  5. URI.escape je zastaralé: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Závěr

Kódování URL je zásadním aspektem webového vývoje a internetové komunikace. Převodem speciálních znaků do bezpečného formátu zajišťuje, že URL jsou správně interpretovány prohlížeči a servery, čímž se udržuje integrita a bezpečnost přenosu dat. Tento nástroj poskytuje pohodlný způsob, jak uniknout speciálním znakům ve vašich URL, zvyšující kompatibilitu a zabraňující potenciálním chybám nebo bezpečnostním zranitelnostem.

Zpětná vazba