我有一个WebService,它有几个调用,只有该站点的成员可用.我想构建一个纯粹的html / jQuery移动应用程序,可以调用这个服务请求和下载信息.

我的初步计划是将用户的用户名和密码放在auth标题中,但我担心会将其暴露给任何流量嗅探器.我可以明显地创建一个会话密钥,所以在他们使用令牌调用的初始身份验证之后,这可能会容易受到会话窃取的影响.

我目前的计划是:

>执行登录调用,这将返回一个在指定时间后过期的令牌
> JS使用该令牌进行呼叫(从而减少密码发送的次数).
>用户拨打电话
>将令牌与用户的IP地址进行比较.
>用户注销,结束会话,及早删除密钥以降低风险

另一个想法是在发送密码时加密密码.在基于.NET RSACryptoServiceProvider实现的JS中进行公钥/私钥加密是否可能/明智?

处理身份验证的最佳方法是什么,最好不要购买SSL证书(数据本身并不特别敏感). ?

解决方法

除了强烈推荐使用SSL的明显原因之外,如果可能,您一定要使用它,您可以通过哈希登录和密码来考虑提高您的安全性.

哈希的工作方式很难打破 – 非常相似的字符串的散列是完全不同的,即使你只改变一个字符.看到:

Login: "jacek",SHA1: "9749d1492af3d43f9c09e04c5c43f27bb909af51"
Login: "Jacek",SHA1: "46c676716f0e9aa86545c034d0e22a114d7cd488"

这表明您需要一个EXACT密码(或者是难以计算的哈希冲突)来“打破”散列,而“simmilar”则完全无用.

你的实现可能会这样:
创建用户(f.e.注册时刻)时,可以计算登录名和密码的哈希值.之后,在DB中你将拥有:

Login  | HashedLogin                              | HashedPassword 
---------------------------------------------------------------------------------------------
jacek  | 9749d1492af3d43f9c09e04c5c43f27bb909af51 | e4e088f4eaa96db85e11ba491a189f96f2e11793

(您可以保留一个unhashed登录名仅用于调试/维护).

之后,在您在应用程序中连接到Web Service之前,您完全一样,但在jQuery中:

var _HashedLogin = Sha1_Hash($("#login").text());
var _HashedPassword = Sha1_Hash($("#password").text());

有很多第三方SHA1库,使用任何一个;)

然后,当您向Webservice发送信息时,仅发送散列值.
即使有人嗅你的ajax电话,他只会得到像:

"UserInfo":
{
    "login" : "9749d1492af3d43f9c09e04c5c43f27bb909af51","pass" : "e4e088f4eaa96db85e11ba491a189f96f2e11793"
}

这对于小偷而言是无用的,但是您可以轻松地将这些值与数据库中的预计算哈希进行比较.你可以跑

select id from Users where HashedLogin = 'login_from_your_ajax_call' and HashedPassword = 'pass_from_your_ajax_call';

如果您获得此查询的任何结果,则您的安全验证完成并且您具有用户的ID.如果没有结果,登录名或密码无效.

SHA1对于家庭和半专业原因来说是相当安全的,为了计算将与您的密码相冲突的哈希值,您最多可能需要2 ^ 61次比较.家庭电脑将要花上几年的时间才能打破这一点.该解决方案仍然容易受到中间人攻击,但是从发送明文认证数据的安全性是一个跨越.

此外,请记住,即使用户进行身份验证,除非您使用SSL,否则所有其他(客户端> Web Service)连接仍然不安全且易于嗅探.

从jQuery安全地调用安全的WebService的更多相关文章

  1. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. 在IOS9中的Cordova应用程序使用JQuery / Javascript的window.history问题

    在两个测试用例中唯一改变的是Cordova.js.解决方法我看到这是几个星期前,但我会发布这个,以防其他人遇到它.听起来它可能与iOS9中的哈希更改生成的导航事件有关.如果是这样,可以将其添加到index.html以禁用哈希侦听:

  3. iOS 5上的jQuery事件

    解决方法在Apple开发论坛上由一个人回答:我需要在将元素添加到DOM之后才绑定(),如下所示:

  4. ios – 如何在RubyMotion中创建字符串的md5哈希

    我有一封电子邮件,想从gravatar.com中提取相应的图片使用ruby,很容易:由于RubyMotion中没有require方法,如何从电子邮件生成哈希?解决方法一种可能性是使用“NSDataMD5”cocoapod.通过将其添加到您的Rakefile来安装它:然后你可以像这样使用它:

  5. Swift- 枚举中的rawValue和hashValue

    成员值仅仅是一组抽象的符号,不能参与任何运算,也不代表任何数据类型!4)原始值的推断:在Swift中只有Int型的原始值可以推断,其余类型包括Double、String、Character类型都无法在原始值中推断;这里的推断是指不用给出所有成员值的原始值而只需要给定一部分即可,其余的原始值Swift可以自动推断出,但是这里就只有Int类型的支持原始值推断,而推断的方法和C语言的枚举类型一样:enumWeekDays:Int{

  6. Swift开篇004->集合

    如有错误和疑问,欢迎指正提出。

  7. android – 会话提供给未打开状态的请求

    FacebookSDK3.0中的Facebook好友选取器示例显示错误拨号框.消息框说:‘com.facebook.Facebook异常:为未打开状态的请求提供的会话.解决方法我有这个确切的错误,如果你从Eclipse运行它,那么logcat中很可能会有更详细的错误.对我来说,我发现真正的错误是我的Android哈希键与我提供给Facebook的哈希键不匹配.仔细检查您使用的哈希键是否正确.请参阅

  8. 有关适用于Android的Facebook SDK的开发和发布密钥哈希的问题

    如你所知,android使用不同的Keystore进行开发和发布,因为两个密钥库在每个方面都不同,它们都有不同的指纹和SHA-1哈希,因此它们被完全区别对待.问:如果我尚未将我的应用程序发布到PlayStore.我可以使用ReleaseKey而不是使用Development键吗?如果你担心Facebook密钥,附加是图像问:为什么我们为iOS开发时,不需要那些关键的哈希?

  9. android – Phonegap本地构建 – jquery ajax错误:readystate 0 responsetext status 0 statustext error

    解决方法您是否在索引文件中包含了内容安全元标记?

  10. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

随机推荐

  1. jquery-plugins – 是否可以使用猫头鹰旋转木马实现循环/无限轮播?

    我正在使用猫头鹰旋转木马,它的工作完美,除了它不支持循环/无限滚动.我没有搜索google和stackoverflow的想法,没有运气.有没有人在猫头鹰旋转木马上实现圆形/无限滚动?

  2. jQuery动态输入字段焦点

    我想使用以下jQuery向我的页面动态添加一个输入字段:在这样做之后,我希望输入字段具有闪烁的文本光标的焦点,所以我想在创建后立即输入.有人可以告诉我我该怎么办?

  3. jquery – 为什么$(window).height()这样错了?

    我试图获取当前浏览器的视口高度,使用但我得到的价值观太低了.当视口高度高达850px时,我从height()获取大约350或400像素的值.这是怎么回事?

  4. jquery – 如果在此div之外和其他draggables内部(使用无效和有效的还原选项),则可拖动恢复

    例如这样但是由于明显的原因,这不行.我可以说这个吗?

  5. 创建一个jQueryUI 1.8按钮菜单

    现在jQueryUI1.8已经出来了,我正在浏览更新,并且遇到了新的Buttonwidget,特别是SplitButtonwithadropdown的演示之一.这个演示似乎表明Buttonwidget可以在这里创建一个下拉菜单.作为讨论的问题,我想知道使用这个新的Button小部件来创建一个下拉菜单有什么方法.干杯.解决方法您必须在按钮下方列出一个列表,方式类似于此处为自动完成提供的演示:http

  6. 灰色divs使用JQuery

    我试图使用这个代码:为了淡出一大堆名为MySelectorDiv的div,唯一的是,它只会淡出第一个而不是所有的div,为什么呢?

  7. 使用jQuery动态插入到列表中

    我有两个订单列表在彼此旁边.当我从一个列表中选出一个节点时,我想按照字母顺序插入到另一个列表中.抓住的是我想要把一个元素放在另一个列表中,而不刷新整个列表.奇怪的是,当我插入到右边的列表中,它工作正常,但是当我插入到左边的列表中时,顺序永远不会出来.我也尝试将所有内容读入数组,并将其排序在一起,以防止children()方法没有按照显示顺序返回任何东西,但是我仍然得到相同的结果.这是我的jQuer

  8. 没有回应MediaWiki API使用jQuery

    我试图从维基百科获取一些内容作为JSON:但我没有回应.如果我粘贴到浏览器的地址栏,就像我得到预期的内容.怎么了?解决方法您需要通过添加&callback=?来触发具有$.getJSON()的JSONP行为?在querystring上,像这样:Youcantestithere.没有使用JSONP,你正在击中same-originpolicy,阻止XmlHttpRequest获取任何数据.

  9. jQuery Ajax请求每30秒

    我有这段代码,但是有些人在我的网站上的值可能会改变.我需要每30秒钟更新一次#financediv.这可以做吗解决方法您可以将代码放在单独的函数中,如下所示:然后每30秒建立一个定时器调用该函数:祝你好运!总结以上是DEVMAX为你收集整理的jQueryAjax请求每30秒全部内容。如果觉得DEVMAX网站内容还不错,欢迎将DEVMAX网站推荐给好友。

  10. jquery – keypress事件在IE和Chrome中不工作,但在FF工作

    任何想法为什么会这样发生?我通常认为Chrome会更加宽容代码?这是我的按键键.我错过了什么吗?右图();和leftimage();是应该工作的功能,因为我在其他地方使用这些功能谢谢您的帮助!

返回
顶部