【问题标题】:Search selected checkbox values搜索选中的复选框值
【发布时间】:2013-12-10 06:39:11
【问题描述】:

我有一个带有复选框列表的下拉菜单。当我选择项目并尝试通过单击搜索按钮在网格中显示时,我无法做到这一点。

protected void btnSearchEmpCode_Click(object sender, EventArgs e)
    {
        string selectedValues = string.Empty;
        foreach (ListItem item in cblEmpCode.Items)
        {
            if (item.Selected)
                selectedValues += "'" + item.Value + "',";
        }
        if (selectedValues != string.Empty)
            selectedValues = selectedValues.Remove(selectedValues.Length - 1);
        SqlConnection con = new SqlConnection(strcon);
        SqlCommand cmd = new SqlCommand("SELECT *FROM Details WHERE Emp_Code IN (" + selectedValues + ")", con);
        SqlDataAdapter Adpt = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        Adpt.Fill(dt);
        AIGrids.DataSource = dt;
        AIGrids.DataBind();
    }

如果我在某个地方出错了,谁能纠正我。

【问题讨论】:

  • 不要这样写你的SqlCommand,谷歌SqlParameters
  • 你的代码有SQL注入
  • @RomanPushkin 如果选择的值来自复选框,那么 SQL 注入如何存在?
  • 通过改变复选框的值
  • @ScottSelby:访问者如何更改复选框的值?我不认为这是可能的国际海事组织。

标签: c# asp.net .net asp.net-mvc c#-4.0


【解决方案1】:

第一件事:

确保*From 之间有间隔

"SELECT *FROM Details WHERE Emp_Code IN (" + selectedValues + ")"

第二次确保查询没有形成:

"SELECT *FROM Details WHERE Emp_Code IN (val1,val2,)"

(最后还有逗号。)

应该是这样的:

"SELECT *FROM Details WHERE Emp_Code IN (val1,val2)"

【讨论】:

    【解决方案2】:

    问题 1: 您将单引号 ' 添加到 Emp_Code 列。
    问题 2: 您没有在 @987654324 之间给出 space @和FROM

    试试这个:

    protected void btnSearchEmpCode_Click(object sender, EventArgs e)
    {
        string selectedValues = string.Empty;
        foreach (ListItem item in cblEmpCode.Items)
        {
            if (item.Selected)
                selectedValues +=  item.Value + ",";
        }
    
        if (selectedValues != string.Empty)
            selectedValues = selectedValues.Remove(selectedValues.Length - 1);
        SqlConnection con = new SqlConnection(strcon);
        SqlCommand cmd = new SqlCommand("SELECT * FROM Details WHERE Emp_Code IN (" + selectedValues + ")", con);
        SqlDataAdapter Adpt = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        Adpt.Fill(dt);
        AIGrids.DataSource = dt;
        AIGrids.DataBind();
    }
    

    【讨论】:

    • 如果选择的值来自复选框,怎么会有sql注入攻击?
    • @F.R.I.E.N.D.S.:是的,你是对的,谢谢,我会编辑我的帖子。
    • 如果有人将任何有害的 sql 传递给事件源/发送者,而不是在查询中传递“选定的值”,你的数据库就消失了。
    • @codebrain 但是传递选定的值或任何东西是程序员的工作...... sql 注入与它无关......我们只需要注意可能分配给 selectedvalues 变量的值。 ..在这种情况下,它似乎没有任何害处,因为直接通过复选框进行分配
    • 是的,我明白了。但我想说的是,不是将“SelectedValues”直接传递到 sql 查询中,而是使用 sqlParameter 来处理注入攻击。 :) 你不需要做任何其他事情
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多