\1除了and之外,是否有任何元字符可以出現在替換正則運算式的替換部分中$1?插值變數時,我應該使用\Q...\E嗎?
例子:
my $str = 'foo bar baz';
$str =~ s/ba/\Q$benign_user_input\E/g;
uj5u.com熱心網友回復:
我向您嘗試避免代碼注入錯誤表示敬意。這是你必須不斷問自己以避免這種情況的問題:
我是否將兩種不同型別的內容連接在一起?
如果答案是肯定的,那么您有一個潛在的問題。如果結果將用作代碼,那是一個潛在的代碼注入錯誤。
您是否嘗試將任意文本與 shell 代碼連接起來?潛在的代碼注入錯誤。
您是否嘗試將任意文本與 SQL 代碼連接起來?潛在的代碼注入錯誤。
您是否嘗試將任意文本與 HTML 代碼連接起來?潛在的代碼注入錯誤。
您是否嘗試將任意文本與正則運算式模式連接?潛在的代碼注入錯誤。
最后一個是\Q..\E有用的。它在模式方面用于將文本轉換為與該文本匹配的正則運算式模式。
現在讓我們在這里進行測驗。
你有
my $str = 'foo bar baz';
$str =~ s/ba/$benign_user_input/g;
這相當于
my $str = "foo " . $benign_user_input . "r " . $benign_user_input . "z";
我們有串聯,所以我們必須問自己
我是否將兩種不同型別的內容連接在一起?
不清楚是什么foo bar baz,也不清楚$benign_user_input包含什么。所以沒有足夠的資訊來回答這個問題。
例如,這將是一個代碼注入錯誤:
my $benign_user_input = "Document 1.pdf";
my $shell_cmd = 'rm -- file';
$shell_cmd =~ s/file/$benign_user_input/;
但也許不是這樣:
my $benign_user_input = "World";
my $greeting = 'Hello, name!';
$greeting =~ s/name/$benign_user_input/;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456738.html
