Cookies 经典ASP Cookie漏洞

Cookies 经典ASP Cookie漏洞,cookies,asp-classic,Cookies,Asp Classic,我在一个经典的asp页面上有一个简单的登录页面 它从表单(“un”)和密码(“pw”)中获取用户名字段,并对其执行以下操作: <% un = newstr(request.form("un")) pw = newstr(request.form("pw")) SQL = "SELECT * from my_table WHERE un = '"&un&"' AND pw = '"&pw&"'" set cRS = oConn

我在一个经典的asp页面上有一个简单的登录页面

它从表单(“un”)和密码(“pw”)中获取用户名字段,并对其执行以下操作:

<%
    un = newstr(request.form("un"))
    pw = newstr(request.form("pw"))

    SQL = "SELECT * from my_table WHERE un = '"&un&"' AND pw = '"&pw&"'"
    set cRS = oConn.Execute(SQL)

    if cRS.EOF then
    %>

        <p>Unable to log you in. Please <a href="default.asp">try logging in again</a>.</p>

    <%
    elseif NOT cRS.EOF then

        Response.Cookies("test") = "jeQmV4'QG)Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY"
        Response.Cookies("test").Expires = Date() + 365

        response.redirect "main.asp"

    end if

end if
%>

无法让您登录。求你了

然后,我在每个页面的顶部进行一些简单的验证,我只希望登录用户能够看到这些页面的内容,这样做:

<%
test = Request.Cookies("test")
if test = "" OR test <> "jeQmV4'QG)Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY" then response.redirect("default.asp")
%>

我想检查一下——这是天真的简单吗

有人可以轻易地侵入我的网站,比如在他们的计算机上设置一个名为“test”的cookie,其值为Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY“

或者有人会猜到“jeQmV4'QG)Eu'N-XSTC;pZeuwqUsjBdVv>Sqr!]ZhzB{dJ'p-#cYSdwY”的字符串值,这难道不是很不可能吗


谢谢

首先,有人可能会试图通过输入用户名来破坏您的系统,如

“;删除表用户

始终,始终使用参数化查询

不要相信UI与任何与安全有关的东西。客户端可以观察你设置的所有cookie,并将任何cookie返回给它想要的。如果不是HTTPS,中间的人也可以观察到cookie被来回发送。


不要重新发明安全框架。它们很难正确使用。

首先,有人可能会试图通过输入用户名来破坏您的系统,如

“;删除表用户

始终,始终使用参数化查询

不要相信UI与任何与安全有关的东西。客户端可以观察你设置的所有cookie,并将任何cookie返回给它想要的。如果不是HTTPS,中间的人也可以观察到cookie被来回发送。


不要重新发明安全框架。它们很难正确使用。

谢谢你的回复。这是“新闻TR”是一个简单的函数,它接受输入并对输入进行参数化。因此,基本上cookies在安全方面是浪费时间的?很遗憾,我没有在我的站点上使用安全服务器的选择。使用会话变量的下一个最佳替代方法是什么?我过去使用过它们,但我的主机为它们设置了15分钟的超时时间这意味着用户必须继续登录,如果他们输入了大量信息,会话超时,提交表单,并被重定向到登录页面,也有丢失数据的风险…再次感谢你的意思可能是
newstr
试图对输入进行净化以阻止SQL注入攻击。净化是不够的,请参阅设置“神奇值”在cookie中是不安全的。对于您的目的来说,它是否足够安全取决于您试图保护的内容,以及如果一个有决心的黑客进入,它会有多糟糕。有许多低成本的托管提供商。如果您不延长会话超时,请四处逛逛。数据库是安全的。cookie或会话值仅用于方便,因此用户不必一直登录。您可以将cookie设置为“True”或“False”,但为cookie指定一个与域相关的特定名称。如果机器是私有的或公共的,cookie的安全性将发挥作用。因此,大多数用户都会被询问是否希望“记住”在设置值之前在此计算机上。另一种技术是在数据库中设置用户登录的标志。该值也可以根据时间值清除。还希望设置仅HTTP的Cookie。感谢您的回复。即“newstr”是一个简单的函数,它接受输入并对输入进行参数化。因此,基本上cookies在安全方面是浪费时间的?很遗憾,我没有在我的站点上使用安全服务器的选择。使用会话变量的下一个最佳替代方法是什么?我过去使用过它们,但我的主机为它们设置了15分钟的超时时间这意味着用户必须继续登录,如果他们输入了大量信息,会话超时,提交表单,并被重定向到登录页面,也有丢失数据的风险…再次感谢你的意思可能是
newstr
试图对输入进行净化以阻止SQL注入攻击。净化是不够的,请参阅设置“神奇值”在cookie中是不安全的。对于您的目的来说,它是否足够安全取决于您试图保护的内容,以及如果一个有决心的黑客进入,它会有多糟糕。有许多低成本的托管提供商。如果您不延长会话超时,请四处逛逛。数据库是安全的。cookie或会话值仅用于方便,因此用户不必一直登录。您可以将cookie设置为“True”或“False”,但为cookie指定一个与域相关的特定名称。如果机器是私有的或公共的,cookie的安全性将发挥作用。因此,大多数用户都会被询问是否希望“记住”在设置值之前在此计算机上。另一种技术是在数据库中设置用户登录的标志。该值也可以基于时间值清除。还希望设置仅限HTTP的cookie。这不仅仅是cookie漏洞。您正在重用相同的字符串。正确的方法是使用SP会话(每个用户的密钥不同)或使每个用户的密钥不同,然后将其存储在数据库中。如果有人猜测密钥,这仍然是一个cookie漏洞,并会导致会话劫持,但由于每个用户的密钥不同,因此猜测是不可能的。您可以采取第二步(大多数银行所做的)通过检测设备(通常是ip地址)并确保这些元素在授予访问权限之前也匹配。这不仅仅是一个cookie漏洞。您正在重用相同的字符串。正确的方法是使用us ASP会话(每个用户的会话不同)或者为每个用户设置不同的密钥,然后将其存储在