我有用户提交的标签,它们可以是任何类型的(有效)UTF-8字符串。我想知道仅通过运行它们通过 urlencode()
是否安全将它们包含在URL中。
换句话说,对于有效的UTF-8字符串,urlencode()
是否是安全的? (有效指已经强制将它们编码为UTF-8)
urlencode
不依赖于特定的字符编码。它只查看字节,将其解释为ASCII字符,并替换任何在ASCII(0x80-0xFF)中不允许或未允许在URL中使用的字节。
现在回答你的问题:是的,使用urlencode
可以安全地对任何字符编码的字符串进行编码,但仅限于URL查询!因为urlencode
根据application/x-www-form-urlencoded格式进行输入格式化,该格式与“正常”的百分比编码不同,在空格编码方面有所不同:在application/x-www-form-urlencoded中,空格被替换为+
,而“正常”的百分比编码将它们替换为%20
。
如果要使用“正常”的百分比编码,请改用rawurlencode
。
是的,urlencode()
应该将任何输入字符串转换为安全的URL字符串。只要URL映射到的任何内容(文件夹/文件/htaccess)中没有奇怪的字符即可。每当从用户处对可能发布一些奇怪东西的内容进行净化时,我都喜欢使用此函数:
utf8_encode()
为了绝对安全起见,我建议先删除换行符。它们本身并不危险,但它们可能成为利用其他漏洞的跳板。
htmlspecialchars()
处理的有效UTF-8字符串 - 那么您就是安全的。只有无效的UTF-8字符串或没有UTF-8标头才会存在问题。 - Xeoncrosshtmlspecialchars
进行转义。如果你确定的话,请将其作为答案提交。 - Xeoncross