Whiz Tools

Únikový reťazec URL

Nástroj na únik reťazcov URL

Úvod

V oblasti webového vývoja a internetovej komunikácie hrajú URL (Uniform Resource Locators) kľúčovú úlohu pri identifikácii zdrojov na webe. Avšak URL majú obmedzenia na znaky, ktoré môžu obsahovať. Niektoré znaky majú špeciálne významy, zatiaľ čo iné sú pre použitie v URL nebezpečné kvôli možnosti nesprávnej interpretácie alebo poškodenia počas prenosu.

Kódovanie URL, známe aj ako percentové kódovanie, je mechanizmus na konverziu špeciálnych znakov do formátu, ktorý môže byť prenášaný cez internet. Tento nástroj vám umožňuje zadať reťazec URL a uniknúť špeciálnym znakom, čím zabezpečíte, že URL je platná a môže byť správne interpretovaná webovými prehliadačmi a servermi.

Pochopenie kódovania URL

Čo je kódovanie URL?

Kódovanie URL zahŕňa nahradenie nebezpečných ASCII znakov znakom %, za ktorým nasledujú dva hexadecimálne číslice predstavujúce ASCII kód znaku. Zabezpečuje, že informácie sú prenášané cez internet bez zmeny.

Napríklad, znak medzery ' ' je nahradený %20.

Prečo je kódovanie URL potrebné?

URL môžu byť odosielané cez internet iba pomocou ASCII znakov. Keďže URL často obsahujú znaky mimo tejto sady, musia byť prevedené do platného ASCII formátu. Kódovanie URL zaručuje, že špeciálne znaky nespôsobia neúmyselné účinky alebo chyby v webových požiadavkách.

Znaky, ktoré potrebujú kódovanie

Podľa špecifikácie RFC 3986 sú nasledujúce znaky rezervované v URL a musia byť percentovo kódované, ak sa majú použiť doslovne:

  • Všeobecné oddeľovače: :, /, ?, #, [, ], @
  • Pododdeľovače: !, $, &, ', (, ), *, +, ,, ;, =

Okrem toho musia byť kódované akékoľvek ne-ASCII znaky, vrátane znakov v Unicode.

Ako funguje kódovanie URL?

Proces kódovania

  1. Identifikujte špeciálne znaky: Analyzujte reťazec URL a identifikujte znaky, ktoré nie sú nevyhradené ASCII znaky (písmená, číslice, -, ., _, ~).

  2. Preveďte na ASCII kód: Pre každý špeciálny znak získajte jeho ASCII alebo Unicode kód.

  3. Preveďte na UTF-8 bajtovú sekvenciu (ak je to potrebné): Pre ne-ASCII znaky zakódujte znak do jedného alebo viacerých bajtov pomocou UTF-8 kódovania.

  4. Preveďte na hexadecimálne: Preveďte každý bajt na jeho dvojciferný hexadecimálny ekvivalent.

  5. Predponujte percentovým symbolom: Pred každým hexadecimálnym bajtom pridajte znak %.

Príklad kódovania

  • Znak: ' ' (medzera)

    • ASCII kód: 32
    • Hexadecimálny: 20
    • URL zakódované: %20
  • Znak: 'é'

    • UTF-8 kódovanie: 0xC3 0xA9
    • URL zakódované: %C3%A9

Okrajové prípady, ktoré je potrebné zvážiť

  • Unicode znaky: Ne-ASCII znaky musia byť zakódované v UTF-8 a následne percentovo zakódované.

  • Už zakódované percentové znaky: Percentové znaky, ktoré sú súčasťou percentových kódovaní, sa nesmú znovu kódovať.

  • Rezervované znaky v dotazovacích reťazcoch: Niektoré znaky majú špeciálne významy v dotazovacích reťazcoch a mali by byť kódované, aby sa predišlo zmene štruktúry.

Dekódovanie URL

Čo je dekódovanie URL?

Dekódovanie URL je opačný proces kódovaniu URL. Prevedie percentovo zakódované znaky späť do ich pôvodnej formy, čím robí URL čitateľnou a interpretovateľnou pre ľudí a systémy.

Proces dekódovania

  1. Identifikujte percentové kódovacie sekvencie: Vyhľadajte všetky symboly %, za ktorými nasledujú dve hexadecimálne číslice v reťazci URL.

  2. Preveďte hexadecimálne na bajty: Preložte každú hexadecimálnu hodnotu na jej zodpovedajúci bajt.

  3. Dekódujte UTF-8 bajty (ak je to potrebné): Pre viacbajtové sekvencie spojte bajty a dekódujte ich pomocou UTF-8 kódovania, aby ste získali pôvodný znak.

  4. Nahradte zakódované sekvencie: Nahradte percentovo zakódované sekvencie pôvodnými znakmi.

Príklad dekódovania

  • Zakódované: hello%20world

    • %20 sa prekladá na medzeru ' '
    • Dekódované: hello world
  • Zakódované: J%C3%BCrgen

    • %C3%A4 sa prekladá na 'ü' v UTF-8
    • Dekódované: Jürgen

Dôležitosť dekódovania URL

Dekódovanie URL je nevyhnutné pri spracovaní používateľských vstupov z URL, čítaní dotazovacích parametrov alebo interpretácii údajov prijatých z webových požiadaviek. Zabezpečuje, že informácie extrahované z URL sú vo svojej správnej, zamýšľanej forme.

Prípady použitia

Webový vývoj

  • Dotazovacie parametre: Kódovanie používateľských vstupov v dotazovacích parametroch na prevenciu chýb alebo bezpečnostných zraniteľností.

  • Parametre cesty: Bezpečné zahrnutie dynamických údajov do URL ciest.

Prenos údajov

  • API a webové služby: Zabezpečenie, že údaje odosielané do API sú správne naformátované.

  • Internationalizácia: Podpora URL s znakmi z rôznych jazykov.

Bezpečnosť

  • Prevencia útokov injekciou: Kódovanie vstupov na zmiernenie rizika skriptovania medzi stránkami (XSS) a iných útokov injekciou.

Alternatívy

Aj keď je kódovanie URL nevyhnutné, existujú scenáre, kde môžu byť iné metódy kódovania vhodnejšie:

  • Base64 kódovanie: Používa sa na kódovanie binárnych údajov v URL alebo keď je potrebná vyššia hustota informácií.

  • UTF-8 kódovanie bez percentového kódovania: Niektoré systémy používajú priamo UTF-8 kódovanie, ale to môže viesť k problémom, ak nie je správne spracované.

Zvážte špecifiká vašej aplikácie, aby ste si vybrali najvhodnejšiu metódu kódovania.

História

Kódovanie URL bolo zavedené s ranými špecifikáciami URL a URI (Uniform Resource Identifier) štandardov v 90. rokoch. Potreba konzistentného spôsobu kódovania špeciálnych znakov vznikla z rozmanitých systémov a znakovým sadám používaným po celom svete.

Kľúčové míľniky zahŕňajú:

  • RFC 1738 (1994): Definoval URL a zaviedol percentové kódovanie.

  • RFC 3986 (2005): Aktualizoval syntax URI, upresňujúc pravidlá pre kódovanie.

V priebehu času sa kódovanie URL stalo neoddeliteľnou súčasťou webových technológií, zabezpečujúc spoľahlivú komunikáciu medzi rôznymi systémami a platformami.

Kódové príklady

Tu sú príklady, ako vykonať kódovanie URL v rôznych programovacích jazykoch:

' Prí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
                    ' Spracovanie Unicode znakov
                    EncodedText = EncodedText & "%" & Hex(65536 + CharCode)
                Else
                    EncodedText = EncodedText & "%" & Right("0" & Hex(CharCode), 2)
                End If
        End Select
    Next i
    URLEncode = EncodedText
End Function

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

% Použitie:
% encodedURL = urlEncode('https://example.com/?name=Jürgen');
## Prí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
// Prí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()
}
## Prí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
// Prí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
// Prí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());
        // Nahradiť "+" s "%20" pre medzery
        encodedURL = encodedURL.replace("+", "%20");
        System.out.println(encodedURL);
        // Výstup: https%3A%2F%2Fexample.com%2Fpath%3Fquery%3Dhello%20world%26name%3DJ%C3%BCrgen
    }
}
// Prí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
// Prí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
?>
// Prí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
}
// Prí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
}
## Prí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 sa môže mierne líšiť na základe toho, ako každý jazyk spracováva rezervované znaky a medzery (napr. kódovanie medzier ako %20 alebo +).

SVG diagram procesu kódovania URL

Proces kódovania URL Pôvodná URL Identifikovať špeciálne znaky Zakódovať URL Príklad: Vstup: https://example.com/über uns Výstup: https://example.com/%C3%BCber%20uns

Bezpečnostné úvahy

Správne kódovanie a dekódovanie URL sú kritické pre bezpečnosť:

  • Prevencia útokov injekciou: Kódovanie používateľských vstupov pomáha zabrániť vykonaniu škodlivého kódu, čím sa zmierňuje riziko skriptovania medzi stránkami (XSS) a SQL injekcie.

  • Integrita údajov: Zabezpečuje, že údaje sú prenášané bez zmeny alebo poškodenia.

  • Dodržiavanie štandardov: Dodržiavanie kódovacích štandardov zabraňuje problémom s interoperabilitou medzi systémami.

Odkazy

  1. RFC 3986 - Uniform Resource Identifier (URI): https://tools.ietf.org/html/rfc3986
  2. Čo je kódovanie URL a ako funguje? https://www.urlencoder.io/learn/
  3. Percentové kódovanie: https://en.wikipedia.org/wiki/Percent-encoding
  4. Štandard URL: https://url.spec.whatwg.org/
  5. URI.escape je zastarané: https://stackoverflow.com/questions/2824126/why-is-uri-escape-deprecated

Záver

Kódovanie URL je nevyhnutným aspektom webového vývoja a internetovej komunikácie. Prevedením špeciálnych znakov do bezpečného formátu zabezpečuje, že URL sú správne interpretované prehliadačmi a servermi, čím sa udržuje integrita a bezpečnosť prenosu údajov. Tento nástroj poskytuje pohodlný spôsob, ako uniknúť špeciálnym znakom vo vašich URL, čím zvyšuje kompatibilitu a zabraňuje potenciálnym chybám alebo bezpečnostným zraniteľnostiam.

Spätná väzba