小编Rém*_*ton的帖子

保护无会话的RESTful API端点

我为一个项目创建了一个简单的RESTful API,部分遵循了Riyad Kalla的这篇非常好的博客文章.现在,我已经在Stack Overflow上阅读了几十个类似的问题,但我似乎无法找到我的安全问题的答案.

简而言之,我的要求是这样的:

  1. 客户端有一个公共API密钥(纯文本,任何人都可以访问网络流量或正确检查代码源)
  2. 客户端使用公共API密钥向服务器发送请求
  3. 服务器有一个秘密的API密钥(除了开发人员之外的任何人都有秘密)
  4. 服务器创建由客户端的请求数据和秘密API密钥组成的HMAC-SHA1哈希
  5. 服务器向API服务器发送与客户端请求相同的请求,但包括生成的HMAC-SHA1
  6. API服务器根据它接收的公共API密钥在其数据库中查找秘密API密钥
  7. API服务器使用与开发人员服务器相同的数据重新创建HMAC-SHA1哈希
  8. 如果哈希匹配,则认为该请求有效并正常处理

我担心有人使用我的服务可以获取公共API密钥(通过嗅探网络流量),然后简单地通过他们的浏览器使用AJAX直接向开发人员的服务器发出相同的请求.因此,恶意用户可以被认证为合法用户并使用其他秘密API密钥访问API.

我会尝试举一个具体的例子.通常我会这样做:

  1. AJAX向我的服务器发出get请求.
  2. 我的服务器用我的API秘密哈希我的请求并将其发送到API服务器.
  3. API服务器验证我的请求并返回有效负载.

但我很害怕:

  1. Evil博士将嗅探我的公共API密钥.
  2. Evil博士将使用我的公共API密钥向我的服务器发出get请求.
  3. 我的服务器将使用我的API秘密来散布Dr. Evil的请求并将其发送到API服务器.
  4. API服务器验证并返回有效负载以完成Dr. Evil的恶意计划.
  5. 邪恶的博士笑了起来.

我还缺少什么,或者这只是RESTful API游戏的一部分?

更新:我自愿省略任何形式的时间戳验证,以保持简单,只关注身份验证问题.

更新2:我已经$_SERVER['HTTP_REFERER']为流程添加了验证.这里的目标是客户端必须与请求一起发送引用者,并且它必须与API侧数据库中列出的引用者匹配.不幸的是,HTTP引用可以很容易伪造.这是另一个安全级别,但仍然不完美.

更新3:我已经更改了服务器端代码,将引用者设置为远程IP地址.这会强制发送到我的服务器的每个请求使用秘密API密钥进行哈希处理,最终使用原始请求IP地址到达API服务器.然后可以验证此IP并且请求可以通过.我相信它还可以伪造$_SERVER['REMOTE_ADDR'],但它比假装更复杂$_SERVER['HTTP_REFERER']......我猜还是不完美.

更新4:根据这些帖子:如何伪造$ _SERVER ['REMOTE_ADDR']变量?https://serverfault.com/questions/90725/are-ip-addresses-trivial-to-forge,$_SERVER['REMOTE_ADDR']虽然很难做到伪造.但是,由于您无法控制伪造的网络,因此无法接收伪造请求的响应.该请求可以成功验证,但其响应不会落入恶意手中.

php api rest curl restful-authentication

5
推荐指数
2
解决办法
4035
查看次数

日期输入无法在iOS7上正确对齐

tl; dr,在这里测试,iOS7无法正确对齐日期输入: http ://cdpn.io/dxjHy

考虑这个HTML:

<input type="date" id="test">
Run Code Online (Sandbox Code Playgroud)

这个CSS:

#test {
  -webkit-appearance:none;
  -moz-appearance:none;
  appearance:none;

  text-align:right;
  padding:30px;
  width:400px;
  font-size:20px;
}
Run Code Online (Sandbox Code Playgroud)

iOS7上的Safari不希望右对齐日期输入中的文本.我的观点是Chrome的解释是正确的.关于如何使Safari合作的任何想法?

Chrome 30:

铬

iOS7,iPad上的Safari Mobile:

IOS 7

css safari google-chrome ios7

4
推荐指数
1
解决办法
2741
查看次数

.htaccess - 没有请求的URI时

我正在寻找一个.htaccess文件,让任何请求传递到其原始目标但重定向到特定文件夹(在这种情况下为启动画面)是没有指定目标.我不是很精通,.htaccess也会感激一些帮助.

示例:我正在请求http://www.domain.com/folder/file.php,它应该通过.但如果我要求http://www.domain.com/,它应该重定向到http://www.domain.com/splash/.

我至今正确地重定向到/splash/,但重定向一切/splash/.

<IfModule mod_rewrite.c>
    RewriteEngine On

    # If the requested URI is empty...
    RewriteCond %{REQUEST_URI} !^$

    # ...then redirect to the "splash" folder
    RewriteRule .* splash [L]

    # Otherwise rewrite the base
    RewriteBase /

    # If the request is not a folder or a file, redirects to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:重要的一点是将http://www.domain.com/重定向到 …

.htaccess

3
推荐指数
1
解决办法
7562
查看次数

CSS叠加div不会拉伸到文档高度

我有一个覆盖元素,使用JavaScript附加到文档.这是它的样式声明:

#overlay_mask {
    display: none;
    position: absolute; 
    top: 0; 
    left: 0; 
    z-index: 9999;
    width: 100%;
    height: 100%;
    background-color: #000000;
}
Run Code Online (Sandbox Code Playgroud)

它的大小正确延伸到窗口的高度,但是当用户滚动时,叠加层不会跟随.

htmlbody元件被设置为width: 100%; 和height: 100%.叠加层是文档的第一个子节点.

css

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

标签 统计

css ×2

.htaccess ×1

api ×1

curl ×1

google-chrome ×1

ios7 ×1

php ×1

rest ×1

restful-authentication ×1

safari ×1