サーバー側に送信されるアプリのユーザー入力をサニタイズしようとしています。サーバーの設定に基づいて、ユーザーが入力したデータは、ファイルやフォルダーの作成またはアクセス時に使用される場合があります。明らかに、サニテーションもサーバーで処理されますが、アプリの性質上、アプリはこれを制御できません。したがって、私または私のアプリが制御できるエンドツーエンドの衛生状態を維持することは私の責任であると感じています.
サニタイズしようとしている設定は、サーバーに渡されるフォト アルバム名です。
出力によると、Log.d
これは正しく機能しています。ただし、設定フィールドをクリックして編集すると、サニタイズされていない入力が表示され、設定がサーバーに渡されるとサニタイズされていない入力も表示されます。
FileUtil.sanitize(stringValue)
少なくとも今のところ、先頭と末尾のスペースを削除し、文字列から and を削除する簡単な方法です../
。..\
他にも見なければならないものがあることはわかっていますが、まだ 100% ではありません。
ですから、明らかな質問は、何が欠けているのでしょうか? ここで行っている変更を上書きする、これが完了した後に発生するイベントはありますか? 変更の直後に値を取得すると、正しいサニタイズされたデータが表示されるため、何かが変更を上書きしているように感じます。
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
String stringValue = value.toString();
if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
// Set the summary to reflect the new value.
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
} else if (preference.getKey().equals("text_default_album")) {
Log.d(TAG, "default pref: "+preference.getKey()+" value: "+stringValue);
stringValue = FileUtil.sanitize(stringValue);
Log.d(TAG, "default pref: "+preference.getKey()+" value: "+stringValue);
preference.setSummary(stringValue);
SharedPreferences prefs = preference.getSharedPreferences();
String def = prefs.getString("text_default_album", "");
Boolean updated = prefs.edit().putString("text_default_album", stringValue).commit();
String def2 = prefs.getString("text_default_album", "");
Log.d(TAG, "def: "+def);
Log.d(TAG, "def2: "+def2);
Log.d(TAG, "updated: "+updated);
} else {
// For all other preferences, set the summary to the value's
// simple string representation.
preference.setSummary(stringValue);
}
return true;
}
};