我使用String.format
方法的Java API來記錄東西。我的方法是這樣的:Java安全String.format和轉義%
public static void log(String message, Object... params){
System.out.println(String.format(message, params));
}
但問題是,如果用戶發送帶有%
性格介於它的消息,它會拋出異常。這裏有一個場景:
log("SELECT * FROM my WHERE name like '%six%'");
和Java尋找東西來取代%s
(沒關係)和%'
(糟糕)。我想解決這個問題。因爲那裏沒有params
和%s
將會丟失,%'
會導致異常。
一個解決方案可以是message.replace("%", "%%")
但我不確定它是否是一個優雅的解決方案。
我不明白爲什麼'%s'將是確定的,如果''%是沒有的。如果他們給你破碎的輸入,他們不能指望工作輸出。只是拋出一個異常。 –
@Christoffer我沒有看到包含SQL'like'子句的消息字符串作爲中斷輸入。 – adarshr
如果字符串同時包含'%s'和'%',並且一個被認爲是OK而另一個不是,那麼輸入被破壞。如果輸入是'String.format()'的格式字符串,並且您不希望'like'語句中的'%s'被參數值替換,則除'%% s'和'% %'在輸入中斷。 –