簡體   English   中英

從URL刪除Javascript

[英]Remove Javascript From A URL

我正在編寫一個服務器端腳本,該腳本用<a/>標簽版本替換文本正文中的所有URL(以便可以單擊它們)。

如何確定我轉換的網址中不包含任何XSS樣式的javascript?

我目前正在過濾字符串中的“ javascript:”,但我覺得這可能還不夠。

任何現代的服務器端語言都具有Markdown或其他輕量級標記語言的某種實現。 這些標記語言用可單擊的鏈接替換URL。

除非您有很多時間花在研究這個主題和實現此腳本上,否則我建議您找到用您的語言編寫的最佳Markdown實現並挖掘其代碼,或者只是在您的代碼中使用它。

Markdown通常以庫的形式提供; 其中一些可以讓您配置必須處理的內容以及必須忽略的內容–在您的情況下,您要處理URL,而忽略其他任何元素。

這是針對不同語言的可靠Markdown實現的(不完整)列表:

您需要對URL進行屬性編碼。
您還應確保它們以http://https://開頭。

這取自Kohana框架,與XSS過濾有關。 這不是一個完整的答案,但可能會助您一臂之力。

// Remove javascript: and vbscript: protocols
$str = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $str);
$str = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $str);
$str = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $str);

// Only works in IE: <span style="width: expression(alert('Ping!'));"></span>
$str = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#is', '$1>', $str);
$str = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#is', '$1>', $str);
$str = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#ius', '$1>', $str);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM