小编jfr*_*how的帖子

在不重新发明轮子的情况下保护REST API

设计REST API时,首先对用户进行身份验证是否常见?

我正在寻找的典型用例是:

  • 用户想要获取数据.当然很酷我们喜欢分享!获取公共API密钥并阅读!
  • 用户想要存储/更新数据......等等!你是谁,你能做到吗?

我想建立一次,并允许说一个Web应用程序,一个Android应用程序或iPhone应用程序来使用它.

REST API似乎是符合此要求的逻辑选择

为了说明我的问题,我将使用一个简单的例子.

我在数据库中有一个项目,它有一个rating属性(整数1到5).

如果我正确理解REST,我将使用我选择的语言实现GET请求,返回csv,xml或json,如下所示:

http://example.com/product/getrating/{id}/
Run Code Online (Sandbox Code Playgroud)

假设我们选择JSON返回:

{
  "id": "1",
  "name": "widget1",
  "attributes": { "rating": {"type":"int", "value":4} }
}
Run Code Online (Sandbox Code Playgroud)

这适用于面向公众的API.我得到那个部分.

我有很多疑问的地方是如何将其与安全模型相结合?我已经习惯了网络应用程序安全性,我的会话状态一直在识别我的用户,所以无论他们决定发送给我什么,我都可以控制他们可以做什么.据我所知,这不是RESTful,因此在这种情况下是一个糟糕的解决方案.

我将尝试使用相同项目/评级的另一个示例.

如果用户"JOE"希望将添加评级项目

这可以使用:

http://example.com/product/addrating/{id}/{givenRating}/
Run Code Online (Sandbox Code Playgroud)

此时我想存储数据,说"JOE"给了产品{id}一个{givenRating}的评级.

问题:我如何知道请求来自"JOE"而不是"BOB".

此外,如果是用于更合理的数据,如用户的电话号码,该怎么办?

到目前为止我得到的是:

1)使用HTTP的内置功能在每个请求(通过HTTP或HTTPS)进行身份验证.

这意味着现在每个请求都采用以下形式:

https://joe:joepassword@example.com/product/addrating/{id}/{givenRating}/
Run Code Online (Sandbox Code Playgroud)

2)使用亚马逊S3的私有和公钥方法:http://www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/

3)无论如何使用cookie并打破REST的无状态部分.

第二种方法对我来说似乎更好,但我想知道我真的需要重新发明这一切吗?所有由我自己进行哈希,存储,生成密钥等等?

这听起来很像在典型的Web应用程序中使用会话并自己重写整个堆栈,这通常意味着"你做错了",尤其是在处理安全性时.

编辑:我想我也应该提到OAuth.

security api rest web-services

73
推荐指数
3
解决办法
5万
查看次数

"官方"国家/地区列表的数据来源

最近,我们开始向我们的网络应用程序的用户展示过时的国家/地区列表的问题.

我们目前有几个DB表来存储本地化的国家/地区名称及其区域(州).然而,随着行星的发展,该列表不断演变,并且随着某些区域被删除,一些区域被合并而被证明是一种痛苦,现有数据需要不断更新.

在处理多地区国家/地区名单时,最佳做法是什么(如果有的话)?

是否有地方或标准?我知道ISO 3166,但他们的列表并不完全是DB友好的......而且它还没有完全本地化.

一个理想的解决方案只是让我们"同步"它?最好是多种语言.该解决方案最好是免费的或订阅的,具有历史性的变化,因此我们可以更新我们的数据(aka tblAddress)

谢谢!

country automation locale country-codes

13
推荐指数
3
解决办法
7522
查看次数

用于动态表单标签宽度的CSS

我正在努力重构我们的一个表单控制器,以便我们可以将它用于面向公众的站点.目前它正在为表单生成表格布局,但我正在尝试使用CSS表单完成它.

我试图重现一些看起来像这样的东西http://www.stylephreak.com/uploads/source/cssforms/cssform.php

我遇到的问题是我找到的每个CSS表单示例似乎都假定左列标签的固定宽度.在我的案例中,我无法控制标签中的内容,它来自用户可编辑的翻译库.使用表格非常简单,我只需使用空格:nowrap; 并且最长的标签将决定td的宽度,每个人都很高兴.

可以用CSS做类似的事情吗?我尝试过使用min-width并强制它不要换行.这有效,但只是推动当前控制权并搞砸了对齐,更不用说IE 6中不支持最小宽度.

使用表格进行表单布局真的很糟糕吗?这是表格数据并且在线性化之后有意义吗?

html css webforms stylesheet

11
推荐指数
1
解决办法
8628
查看次数

使用Git作为Web开发和多个环境的源控件

很少的背景:我们是一个由6名开发人员组成的团队,他们正在使 自从发布以来,我们一直使用CVS作为我们在使用ColdFusion w/Eclipse的Windows服务器上的源代码控制系统.随着最近围绕Git和分布式系统的大肆宣传,我们认为我们会检查出来.

作为标准的Web应用程序,我们拥有本地环境,我们可以在其中开发新功能/错误修复.一个开发环境,我们通过QA推送所有内容进行初始测试.我们发送已经测试过的功能/修复的分段我们的环境是尽可能地模仿我们的生产服务器.最后,一切都在旷野的现场系统中进行...

这个过程在某些时候相当痛苦,因为大部分都是通过FTP完成的,而且通常我们遇到冲突,因为某些事情需要比平时更长的时间进行测试或者需要快速修复错误.

关于Git如何在这种情况下工作,我有点困惑,这显然不是一个不常见的场景,但我发现的大部分内容都没有详细谈论它.

如果我理解正确的本地分支机构在Git中发挥重要作用,我首先克隆git存储库然后分支出来修复一些东西并将其全部提交到本地?

然后我将它提交回主干库下的主存储库处理合并冲突,如果有的话?

如果我的假设是正确的,那么主要问题是分期会发生什么.显然,某些功能/修复需要更长的时间来测试,有一些是比较急,等我将能够简单地做一些像某些功能/分支机构的拉到分期进行最后的签核,然后做同样的从直播服务器(拉,因为他们已签字)?

从CVS背景中获取相当多的东西...任何帮助将不胜感激!

windows git

10
推荐指数
1
解决办法
1448
查看次数

REST身份验证和HMAC /私钥(何时设置?)

在过去的几天里,我一直在用一个简单的应用程序想法,因为我正在尝试自学REST基础知识.

到目前为止,我已经认识到,实现这一目标的最佳方式是使用亚马逊使用的HMAC.

我最关心的是我究竟如何对用户进行身份验证为他们提供私钥,以便他们可以开始签署HMAC?我一直读取用于签名的HMAC私钥不应该通过线路发送,但后来如何,他们曾经把它摆在首位?

我的想法是这样的,但我不确定这是否有效.

用户数据库表:

users (simplified, this would probably be a private key per client app?)
  id (their public key?)
  username
  password?
  privatekey
Run Code Online (Sandbox Code Playgroud)

假设一个HTML/JS客户端将向用户呈现一个传统的登录页面,该页面向API发送POST,如下所示:

https://example.com/myapp/api/v1/authenticate.json
POST: username / password
Run Code Online (Sandbox Code Playgroud)

那也会回来

404:User not found
200:{ "id" : <id>, "privatekey": <privatekey> }
Run Code Online (Sandbox Code Playgroud)

客户端然后将该密钥存储在某个地方(本地存储/ cookie是安全的地方吗?)并使用它来签署看起来像这样的其他请求

GET https://example.com/myapp/api/v1/something/?key1=value1&publickey={theirID}&hmac={hmac signature of the request using their private key}
Run Code Online (Sandbox Code Playgroud)

然后,服务器将检查公钥,检索关联的私钥并重建HMAC签名,如果它们匹配,则我们有经过身份验证的请求处理它.

我说得对吗?如果我仍然需要像我的例子中那样的密码,我不确定我是否理解私钥的作用,所以有些东西告诉我,我可能错了.

authentication rest web-services restful-authentication

10
推荐指数
1
解决办法
7186
查看次数

Mercurial hg,我做得对吗?

我们正在从CVS转换为Mercurial hg.

我们的基础架构是Windows 2003/IIS6

  • 每个开发人员都在他们的计
  • 1xDevelopement服务器
  • 1xStaging服务器
  • 生产环境

这是我到目前为止所做的:

在我的机器上,开发服务器上和登台服务器上安装Mercurial.

  1. 在dev上创建了一个存储库.服务器.
  2. 在那里导入我们的CVS存储库.
  3. 将该存储库克隆到我的本地计算机.
  4. 将该存储库克隆到我们的登台服务器.

对于过去的发展,我们总是分享一个分支,不理想,但合并是一种痛苦,我们从不打扰和处理它.

现在,如果我理解正确,我们应该这样做:

本地:

  1. hg branch myfeature1 //开始使用feature1

需要紧急修复错误,使用影响SAME文件作为我们的功能

  1. hg更新默认值
  2. hg branch bugfix1 //修复bug
  3. hg commit --rev bugfix1 //我们提交的修复错误
  4. hg push --rev bugfix1 -f // - f在这里看起来很奇怪,迫使创建一个新的分支
  5. hg update feature1 //我们回到feature1上工作
  6. hg commit --rev feature1 //完成工作提交
  7. hg push --rev feature1

DEV

  1. hg branches //我们看到了bugfix和feature1
  2. hg merge --rev bugfix1
  3. hg commit //提交bugfix1
  4. hg merge --rev feature1
  5. hg commit // commiting feature1 // Dev master现在是我们的主干,为包含feature1和bugfix1的新开发人员做好准备.

暂存(QA需要在测试feature1之前签署该重要的错误修正

  1. hg incoming //我们看到了新的东西 …

cvs version-control mercurial

7
推荐指数
1
解决办法
1229
查看次数

Firefox添加了<a xmlns="http://www.w3.org/1999/xhtml">

编辑:由于ajax调用,这不会发生.我改变它以使用来自TinyMCE组件的值来获得乐趣,我得到同样的东西.

content = tinyMCE.get('cComponent').getContent(); //content at this point is <p>test</p>
valueToDisplay = content;
Run Code Online (Sandbox Code Playgroud)

如果我做:

jQuery(selector).html(valueToDisplay);
Run Code Online (Sandbox Code Playgroud)

我明白了:

<p><a xmlns="http://www.w3.org/1999/xhtml">test</a></p>
Run Code Online (Sandbox Code Playgroud)

有没有人在使用Firefox 3.6.10和jQuery 1.4.2之前见过这个,我试图使用jQuery ajax调用的结果更改链接文本.

我得到了ajax调用的预期结果:

function getValueToDisplay(fieldType){
    var returnValue;
    jQuery.ajax({
        type: "GET",
        url: "index.cfm",
        async:false, 
        data: "fieldtype="+fieldType,
        success:function(response){
            returnValue = response;
    }                   
    });
    return returnValue;
   }
Run Code Online (Sandbox Code Playgroud)

如果我在此时检查值,我会得到预期值

console.log(returnValue) //output this --> <p>Passport Photo</p>
Run Code Online (Sandbox Code Playgroud)

但是,当我使用jQuery(选择器).html将其插入现有锚点时

我明白了:

<p><a xmlns="http://www.w3.org/1999/xhtml">Passport Photo</a></p>
Run Code Online (Sandbox Code Playgroud)

我一直在试图找出添加xmlns锚的位置,但不能将其缩小到任何特定的范围.

编辑:我已经尝试在ajax调用中强制dataType:"html"...没有变化.

javascript jquery xml-namespaces

6
推荐指数
1
解决办法
5742
查看次数

jBCrypt checkpw的严重问题(当它不应该返回true?)

编辑:好的,所以我有点在这里找到答案BCrypt说长,类似的密码是等价的 - 问题与我,宝石,或密码学领域?

但是,如果你不得不在我们试图教育用户选择越来越复杂的密码,甚至密码,密码必须短于n个字符的世界中限制用户的密码长度,有人可以推荐使用bCrypt进行散列的新问题似乎是一种方式,最终在thedailywtf.com星期五的截图:)

原始问题如下:

我正在为一个应用程序重构一个旧的登录页面,并决定使用JAVA实现jBCrypt(http://www.mindrot.org/projects/jBCrypt/)给bCrypt一个旋转,并遇到一个主要的显示阻止.

问题在于checkpw方法,当使用非常长的种子时,它总是似乎返回true.我打算使用{InternalSalt} {username} {password}来填写用户的密码,然后使用bCrypt对其进行哈希处理.

所以我有以下代码(尽可能地将其剥离以隔离checkpw).

public class Test {
public static void main(String[] args) {
    String plaintext = "jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN";

    String pw_hash = BCrypt.hashpw(plaintext, BCrypt.gensalt());

    if (BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK|8kG=d368Id:D@$^_80I{qrn1HM6423{FtestAccountO1nu3jKN", pw_hash))
        System.out.println("It matches");
    else
        System.out.println("It does not match");

}
Run Code Online (Sandbox Code Playgroud)

}

这将是应该打印"匹配".

我有问题是说你说的添加AAA到密码传递给checkpw使它

BCrypt.checkpw("jw~ct/f61y1m7q458GiLVQpiqDK | 8kG = d368Id:D @ $ ^ _ 80I {qrn1HM6423 {FtestAccountO1nu3jKNaaa",pw_hash)

它仍然是真的!不完全是我所期待的.我没有在doc中看到任何密码长度限制但是我无法用较小的密码种子重现它,看起来如果我修改除了字符串结尾之外的其他任何东西,它按预期返回false.

我错过了什么专业吗?我知道我不应该是唯一一个在这些论坛上使用jBcrypt的人,因为我看过BCrypt在做一些研究时在很多帖子中推荐的.

编辑:Windows 7 64位 - Java(TM)SE运行时环境(版本1.6.0_24-b07)

security encryption passwords blowfish salt

6
推荐指数
1
解决办法
2325
查看次数

Mercurial - 我可以做得更好吗?

我们已经使用Mercurial几个月了,它已经改善了我们的部署过程.这是很好的部分.

我们现有的系统正在运行,但如果您不小心或急于求成,它仍然容易出错.这让我想知道是否有方法可以改进它或者...也许我们完全偏离轨道:)

我们的环境包括:

  • 本地开发工作站(每个开发者)
  • 开发服务器(托管数据库和中央存储库)
  • 验收服务器(QA完成的地方)
  • 登台服务器(我们在发布分支的阶段,然后我们将robocopy移植到实时系统)

关于我们切换原因的一点背景:

我们处在一个工作环境中,经常让我们从一个任务切换到另一个任务,留下许多待处理的任务.当我们回到CVS时,许多人会变得陈旧和混乱.部署是一场噩梦,因为你必须解决需要上线的线路以及其他没有使用Beyond Compare的线路.

Mercurial与命名分支和轻松合并为我们解决了这个问题.所以不知道我们期待什么,我们设置它.

首先,我们清理了清理生产源,修剪死文件等.

我们在暂存时将其设为FTP并将其作为"默认"的新存储库,这是我们的稳定分支,随时可以部署.

之后,我们hg clone对开发服务器进行了操作,并让每个开发人员都hg clone来自开发默认分支.

接受我们做QA的时候,我们做了一个hg clone开发服务器的默认分支.

此时我们到处都有稳定的代码副本,每个人都渴望入手!

本地机器正在推动开发,从开发中接受拉动并且分段完全隔离并且可以从提供路径的任何地方拉出.

现在这背后的想法是,我们系统上的默认分支将始终是实时服务器上代码的副本,前提是我们记得在启动新分支之前提取.在开始新功能时,我们会:

hg pull -b default #synch up
hg update default 
hg branch {newFeature} #newFeature completely isolated from other changes.

*work on {newFeature}
Run Code Online (Sandbox Code Playgroud)

不好了!一个错误!这与我目前正在处理的内容无关,我们称之为{bugFix111}.这似乎需要一个独立于我的功能的新分支; 返回更新的默认值.这将使newFeature和bugFix111彼此隔离,并且每个都可以独立生存,因为它们基于默认值.

hg update default
hg pull -u
hg branch {bugFix111}
Run Code Online (Sandbox Code Playgroud)

完成工作后说{bugFix111}

hg push -F {bugFix111} #send our fix to the main central repo on dev.  
Run Code Online (Sandbox Code Playgroud)

去验收:

hg …
Run Code Online (Sandbox Code Playgroud)

version-control mercurial

5
推荐指数
1
解决办法
408
查看次数

Mercurial在VPN连接上非常慢

我们的团队已经使用Mercurial一段时间了,一切都很棒.我们都有一个克隆的存储库和推/拉命名分支到一个集中的Windows服务器,在我们的局域网上通过映射驱动器访问.

问题是我最近开始远程工作,性能显着下降.我通过VPN连接到办公室并像往常一样访问共享驱动器,但过去20-30秒推送现在需要超过10分钟!

我有一个不错的电缆连接(30Mpbs/2Mbps),所以我不希望小的改变需要这么长时间推动但似乎无论我的更改集多么小,许多MB交换(从推动期间监控网络适配器) ).即使我只修改了源文件中的一行,情况也是如此.它似乎也依赖于存储库大小,存储库越小越好但它永远不会"快速".

我不熟悉Mercurial推送所涉及的内容,但似乎需要在主存储库和我的主存储库之间来回做很多事情,最终决定要发送什么.

我刚刚完成了5个文件的推送,我总共添加了不到5KB的代码,这是我hg push -b branch --debug --time超过13分钟的结果!

这是VPN上的"正常"还是我错过了某种关键配置?

C:\inetpub\www\app1>hg push -b mynewbranch --new-branch --debug --time
pushing to X:\app1
query 1; heads
searching for changes
taking initial sample
searching: 2 queries
query 2; still undecided: 4, sample size is: 4
2 total queries
listing keys for "bookmarks"
5 changesets found
list of changesets:
7327fd8a913d019475783693fba7afc790bba11a
967e02cbdddb844b0cf1b67b452ff8e96614daa6
b5c9166ca22e98c499d71c9a0b7da2c36649f9f5
7e30ec219db545ba9309f7b8e8b015cf2a652383
79d028c22d2bc4554092ba5bad8249c7129d3caf
adding changesets
bundling: 1/5 changesets (20.00%)
bundling: 2/5 changesets (40.00%)
bundling: 3/5 changesets (60.00%)
bundling: 4/5 changesets …
Run Code Online (Sandbox Code Playgroud)

version-control vpn mercurial mercurialeclipse

5
推荐指数
1
解决办法
1718
查看次数