我想使用javaScrip调用Web服务,但Web服务调用包含用户名和密码,因此我考虑将用户名和密码的值存储在隐藏字段中,然后使用构建Web服务URL通过附加用户名和密码的值来添加javaScript。如果我要为这些Web服务调用实施https,那么将存储用户名和密码的值作为html页面内的隐藏字段考虑安全吗?
答案 0 :(得分:6)
绝对是,黑客将能够看到隐藏字段的值。对于查看页面源的任何人来说,HTML中的隐藏字段都很容易看到。
要显示此信息,请参阅Google登录页面中的一些代码。
<form id="gaia_loginform"
action="https://www.google.com/LoginAction2?service=mail" method="post"
onsubmit="return(gaia_onLoginSubmit());">
<div id="gaia_loginbox">
<table class="form-noindent" cellspacing="3" cellpadding="5" width="100%" border="0">
<tr>
<td valign="top" style="text-align:center" nowrap="nowrap"
bgcolor="ddf8cc">
<input type="hidden" name="ltmpl"
value="default">
<input type="hidden" name="ltmplcache"
value="2">
特别注意这一点:
隐藏意味着它不会显示在网页上,但仍包含在源代码中。所有人都必须做的是导航到页面,查看源代码,他们可以找到任何隐藏的条目。
答案 1 :(得分:2)
是的,任何客户都可以看到它,不是它不安全。您只需要查看页面的来源,甚至可以看到隐藏的<input>
值。
答案 2 :(得分:2)
如果攻击者正在网络上侦听,那么它是安全的。正确使用HTTPS会阻止他学习任何有用的东西。如果用户名/密码是标识浏览器用户的对,则这是正确的线程模型。如果用户名/密码对将您(服务器运营商)识别为第三方,则它不是正确的型号。
如果你认为用户是敌人,这是不安全的。他可以简单地要求他的浏览器给他隐藏字段的值,或者他可以嗅探SSL连接(例如使用javascript,或挂钩SSL库,或让他的SSL库将密钥发送到日志文件)。您不能将发送给客户的任何信息保密。
实际上,这意味着您应该使用用户的会话ID验证客户端,并使用服务器连接到外部API。