我想知道是否有一种方法可以限制用户输入特殊字符,用户只能输入A-z和0-9字符并防止在Android中进行任何SQL注入?这里的最佳做法是什么?
谢谢。
答案 0 :(得分:0)
对于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来简化。
答案 1 :(得分:0)
您可以使用InputFilter
来验证用户在EditText
中输入的内容。
当缓冲区要替换范围时,将调用此方法 dstart ... dend of dest with the new text from the range start ... end of 资源。返回您想要放置的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注入的非常糟糕的方法。在数据层中使用parameterized queries会更好。
答案 2 :(得分:0)
您可以将EditText
与这些xml选项一起使用:
<EditText
android:inputType="text"
android:digits="0123456789qwertzuiopasdfghjklyxcvbnm"
android:hint="Only letters, digits allowed"/>
虽然记住你是否正确使用SQLitedatabase
的查询方法,但它会自行防止所有SQL注入。