Что такое кодирование символов в URL? Браузер или PHP? - PullRequest
1 голос
/ 03 марта 2010

Представьте себе эту простую форму

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post">
    <fieldset>
        <legend>Contact Me</legend>
        <label for="email">Email:</label>
        <input type="text" name="email" id="email" />
        <button type="submit">Submit</button>
    </fieldset>
</form>

Теперь представьте, что к ней обращаются через form.php?hack=" onsubmit="alert('xss')

Вывод при просмотре источника:

<form action="/things/?hack=%22%20onsubmit=%22alert(%27xss%27)" method="post">

Что такое кодировкаэто - это браузер или PHP?

Вне любопытства я всегда повторяю $_SERVER['REQUEST_URI'] в htmlspecialchars().

Ответы [ 2 ]

2 голосов
/ 03 марта 2010

Это делается браузерами, если вы работаете в какой-то среде PHP, некоторые из них также меняют ее.Это похоже на то, что вы делаете с помощью функции PHP urlencode.

1 голос
/ 03 марта 2010

Если вы введете form.php?hack=" onsubmit="alert('xss') в адресную строку вашего браузера, он преобразует его в form.php?hack=%22%20onsubmit=%22alert(%27xss%27) как ", а пробелы в URI не допускаются. Поэтому они должны быть закодированы. ' разрешено в URI, но также может быть закодировано.

...