我想知道是否有办法限制用户输入特殊字符,用户只能输入any和0-9字符,并防止Android中的任何SQL注入?这里的最佳做法是什么?
谢谢。
发布于 2014-07-11 23:10:51
您可以在以下EditText选项中使用xml:
<EditText
android:inputType="text"
android:digits="0123456789qwertzuiopasdfghjklyxcvbnm"
android:hint="Only letters, digits allowed"/>尽管要记住,如果您正确地使用了SQLitedatabase的查询方法,但是它会自动阻止所有的SQL注入。
发布于 2014-07-11 23:09:13
对于EditText,可以添加TextWatcher侦听器
edt.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
});在onTextChanged()或afterTextChanged()中,您可以获取文本并删除您不会使用的字符,您可以使用rejex来简化操作。
发布于 2014-07-11 23:09:27
您可以使用InputFilter来验证用户在EditText中输入的内容。
当缓冲区要替换范围dstart…时调用此方法。使用范围内的新文本dend开始…源头的尽头。返回您希望放在那里的CharSequence,包括一个空字符串(如果适当的话),或者null来接受原始的替换。
例如,如下所示:
InputFilter filter = new InputFilter()
{
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
if (source.toString().contains("'"))
return "";
else
return null; // Accept original replacement.
}
};
editText.setFilters(new InputFilter[] { filter });但是,这将是避免SQL注入的一种非常糟糕的方法。在数据层中使用参数化查询会好得多。
https://stackoverflow.com/questions/24707818
复制相似问题