【问题标题】:how to restrict textview from accepting some or all special characters?如何限制 textview 接受部分或全部特殊字符?
【发布时间】:2014-09-02 16:11:20
【问题描述】:

我想知道有没有一种方法可以限制用户输入特殊字符并且用户只能输入 A-z 和 0-9 字符并防止 Android 中的任何 SQL 注入?这里的最佳做法是什么?

谢谢。

【问题讨论】:

  • 您有 3 个答案,请选择对您帮助最大的一个。

标签: java android sqlite sql-injection


【解决方案1】:

对于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 来简化。

【讨论】:

    【解决方案2】:

    可以使用InputFilter 来验证用户在EditText 中输入的内容。

    当缓冲区要替换范围时调用此方法 dstart ... dend of dest 带有来自范围 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 会好很多。

    【讨论】:

      【解决方案3】:

      您可以将EditText 与这些 xml 选项一起使用:

      <EditText 
        android:inputType="text" 
        android:digits="0123456789qwertzuiopasdfghjklyxcvbnm" 
        android:hint="Only letters, digits allowed"/>
      

      虽然请记住,如果您正确使用SQLitedatabase 的查询方法,它会自行阻止所有 SQL 注入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-09
        • 1970-01-01
        • 2022-06-17
        • 2021-10-11
        • 2011-05-18
        • 2016-08-20
        • 1970-01-01
        • 2018-10-25
        相关资源
        最近更新 更多