具有 ASP 成员资格的 Sql Server 中的安全性和 SQL 注入

Posted

技术标签:

【中文标题】具有 ASP 成员资格的 Sql Server 中的安全性和 SQL 注入【英文标题】:Security and SQL injection in Sql Server with ASP membership 【发布时间】:2014-12-13 15:33:10 【问题描述】:

我正在实施具有成员资格的 ASP MVC。该网站托管在 Azure 云中。

有哪些预防措施可以预防

    Sql 注入暴力攻击 如何根据尝试阻止/锁定用户访问 IP

【问题讨论】:

【参考方案1】:

我有第一个问题的答案。 您必须在“Session[data]”中存储一些有用的数据,并且不要从客户端发送。

    public ActionResult Index()
    
        try
        
            if (WebSecurity.IsAuthenticated)
            
                String ContractID_string = Session["ContractID"].ToString();
                if(ContractID_string!="0") 

也不要在没有检查的情况下在 linq 或 sqlQuery 中使用来自客户端的某些字符串输入值。

最好的使用方法

控制

 [HttpPost]
    [ValidateAntiForgeryToken]
public ActionResult _SaveMail(Email_Options Mail)

在视图中

     @using (Ajax.BeginForm("_SaveMail", "Contract", Model,
        new AjaxOptions
        
            UpdateTargetId = "Email_Options",
            OnFailure = "alert('errr')",
            OnSuccess = "DeleteErrorMessage('#Form_"+ViewBag.Contract_part+"')"
        , htmlAttributes: new  id = "Form_"+ViewBag.Contract_part))
    
        @Html.AntiForgeryToken()
        @Html.ValidationSummary()
        <table id="Email_Options">
            <tbody>
                <tr>
                    <th>@Html.LabelFor(m => Model.Email, new  style = "font-size:1.05em;" )</th>
                    <th> 
                        @Html.HiddenFor(m => Model.ContractID)
                        @Html.EditorFor(m => Model.Email)
                        @Html.ValidationMessageFor(m => Model.Email)
                        <button style="font-size:1em; margin:0px; padding:0;" type="submit">Сохранить</button>
                    </th>
                </tr>
                <tr>
                    <th>@Html.LabelFor(m => Model.SendToEmail, new  @class = "checkbox" )</th>
                    <th>@Html.CheckBoxFor(m => Model.SendToEmail)</th>
                </tr>
                <tr>
                    <th>@Html.LabelFor(m => Model.SentToHome, new  @class = "checkbox" )</th>
                    <th>@Html.CheckBoxFor(m => Model.SentToHome)</th>
                </tr>
                <tr>
                    <th>@Html.LabelFor(m => Model.Print, new  @class = "checkbox" )</th>
                    <th>@Html.CheckBoxFor(m => Model.Print)</th>
                </tr>
            </tbody>
        </table>
        

【讨论】:

以上是关于具有 ASP 成员资格的 Sql Server 中的安全性和 SQL 注入的主要内容,如果未能解决你的问题,请参考以下文章

部署到 Azure 应用服务时,Asp.net 成员资格提供程序无法连接到本地 SQL Server

如何将数据库从 SQL 服务器迁移到 SQL Azure,其中包含带有数据的 asp.net 成员资格提供程序

SQL Server 成员资格日期范围

使用 SQL Server 2005 通过 LDAP 访问 Active Directory 角色成员资格

如何使 SQL Server 数据库在附加用户和角色成员资格时继承它们?

实体框架代码优先和 ASP.NET 成员资格