搜索文本框的XSS脚本

皮肤

我有一个文本框,用于在站点内搜索数据。我的客户想要什么,

1)在搜索字段中输入任何文本,然后单击搜索符号。

2)使用“代理”之类的Web代理工具将请求发送到服务器

3)在脚本后面添加参数

test<~script>confirm(123)<~/script>

这里发生的是

专家输入的XSS脚本无需任何输入即可反映在响应中。请看下面的图片,您将有一个主意:-

![在此处输入图片描述] [1]

伙计们,让我知道您是否需要更多与此相关的信息。请帮助大家,任何帮助将不胜感激。我想从服务器端阻止攻击。

HTML和JS代码:-

  <asp:TextBox ID="txtSearch" runat="server" class="txtfld-search" oncopy="return false" oncut="return false" onpaste="return false"></asp:TextBox>

JS代码:-

<script type="text/javascript">
$(document).ready(function () {
    $('#ctl00_topNavigation_txtSearch').keyup(function () {
        var $th = $(this);
        $th.val($th.val().replace(/[^.%a-zA-Z0-9 ]/g,
        function (str) {
            alert('Special characters not allowed except %');
            return '';
        }));
    });
});

另请参见后面的代码:-

protected void btnSearch_Click(object sender, ImageClickEventArgs e)
{
    Response.Redirect("search.aspx?tx=" + txtSearch.Text);
}

另外,请参见搜索部分的代码:-

private void SearchResult()
{
    DataTable dt;

    if (Session["Search"] == null)
    {
        ResXResourceReader reader = new ResXResourceReader(Server.MapPath("~/App_GlobalResources/Strings.en-US.resx"));
        IDictionaryEnumerator id = reader.GetEnumerator();
        string sResourceFile = Server.MapPath("~/App_GlobalResources/Strings.en-US.resx");
        XmlDocument xmlResource = new XmlDocument();
        xmlResource.Load(sResourceFile);

        XmlNodeList elmData = xmlResource.SelectNodes("//root/data");

        dt = new DataTable();
        dt.Columns.Add(new DataColumn("ID", System.Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Title", System.Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Description", System.Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Url", System.Type.GetType("System.String")));
        dt.Columns.Add(new DataColumn("Link", System.Type.GetType("System.String")));

        foreach (XmlElement element in elmData)
        {
            DataRow dr = dt.NewRow();
            dr["ID"] = element.GetAttribute("name");
            //dr["Title"] = element.GetAttribute("name");
            XmlNodeList sDescription = element.SelectNodes("value");
            dr["Title"] = sDescription.Count > 0 ? sDescription.Item(0).InnerText : string.Empty; ;
            dr["Description"] = string.Empty;
            XmlNodeList sUrl = element.SelectNodes("comment");
            if (sUrl.Count > 0)
            {
                Int32 sPgTitle = sUrl.Item(0).InnerText.LastIndexOf(".") + 1;
                if (sPgTitle > 0)
                {
                    dr["Url"] = sUrl.Item(0).InnerText;
                    //dr["Url"] = Request.Url.Host.ToLower() + "/rbank/" + sUrl.Item(0).InnerText;
                    dr["Link"] = string.Empty;
                }
                else
                {
                    dr["Link"] = sUrl.Item(0).InnerText;
                }
                dt.Rows.Add(dr);
            }
        }
        //foreach (DataRow dr in dt.Rows)
        //{
        //    DataRow[] rDesc = dt.Select("Link <> ''");
        //    for (int i = 0; i < rDesc.Length; i++)
        //    {
        //        DataRow[] rTitle = dt.Select("ID = '" + rDesc[i]["Link"] + "'");
        //        if (rTitle.Count() > 0)
        //        {
        //            rTitle[0]["Description"] = rDesc[i]["Title"];
        //        }
        //    }
        //}

        DataRow[] drDelete = dt.Select("Link <> ''");
        foreach (DataRow drCheck in drDelete)
        {
            dt.Rows.Remove(drCheck);
        }
        dt.TableName = "FilterValues";
        reader.Close();
        Session["Search"] = dt;
    }
    else
    {
        dt = Session["Search"] as DataTable;
    }
    DataView dv = new DataView();
    dv.Table = dt;
    **dv.RowFilter = "Description LIKE ('%" + Request.QueryString["tx"].Trim().ToLower() + "%') or Title LIKE ('%" + Request.QueryString["tx"].Trim().ToLower() + "%')";**
    dv.Sort = "Title ASC";

    dgrdPages.DataSource = dv;
    dgrdPages.DataBind();

    lblSearchWords.Text = Request.QueryString["tx"].Trim();
    lblFilesFound.Text = dv.Count.ToString();
}

我发现dv.RowFilter可以像这样通过SQL注入来提供。我想防止这种情况。请帮忙。

低音

正如其他朋友所提到的,客户端代码很容易被忽略。因此,我们可以将您对javascript所做的工作翻译成c#,并添加我的代码,以删除多余的空间并将其合并为一个:

if (Regex.IsMatch(txtSearch.Text, "[^a-zA-Z0-9 %]"))
            {
                //error
                Response.Redirect("Error.aspx?tx=It's a Shame Dude!");
            }
            else
            {
                //Remove multiple spaces
                String ClearSpaces = Regex.Replace(txtSearch.Text, @"\s+", " ");
                Response.Redirect("search?tx=" + HttpUtility.UrlEncode(ClearSpaces));
            }

别忘了,正则表达式来自:这个答案而用于替换多个空格的正则表达式就是来自这个答案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

搜索文本框在文本框中显示元素

来自分类Dev

自动搜索的Java脚本不适用于CSS文本框

来自分类Dev

jsTree搜索文本框未出现

来自分类Dev

来自文本框的MySQL搜索值

来自分类Dev

Solr打开文本框搜索

来自分类Dev

CSS的搜索按钮和文本框

来自分类Dev

使用文本框过滤和搜索

来自分类Dev

搜索查询2个文本框

来自分类Dev

按文本框搜索图片

来自分类Dev

以角度提前搜索文本框

来自分类Dev

使用文本框搜索 DataGridView

来自分类Dev

c#从列表框中搜索文本框

来自分类Dev

如何使用文本框搜索列表框 wpf

来自分类Dev

如何使用Java脚本中的Enter键触发按钮?/如何给文本框和搜索按钮指定ID?

来自分类Dev

如何选择包含文本框的项目。从文本框搜索到ListView

来自分类Dev

在angularJs中编写搜索文本框的正确方法

来自分类Dev

Bootstrap内联文本框和搜索按钮

来自分类Dev

按Enter键以搜索值文本框

来自分类Dev

增加导航栏标题内的搜索文本框的宽度

来自分类Dev

在文本框C#中键入时进行搜索

来自分类Dev

文本框,不带重音的搜索(忽略重音)

来自分类Dev

使dataTables中的搜索文本框变为UpCase

来自分类Dev

具有文本框的DataTemplate进行搜索

来自分类Dev

如何在Windowsform文本框中执行搜索

来自分类Dev

使用HTML文本框的数据表列搜索

来自分类Dev

在数据网格上进行多个文本框搜索

来自分类Dev

如何使用文本框进行搜索?的PHP

来自分类Dev

在GridView Asp.net中添加搜索文本框

来自分类Dev

在带有首字母的文本框中搜索