Cookies 经典ASP Cookie漏洞
我在一个经典的asp页面上有一个简单的登录页面 它从表单(“un”)和密码(“pw”)中获取用户名字段,并对其执行以下操作: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
<%
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会话(每个用户的会话不同)或者为每个用户设置不同的密钥,然后将其存储在