时间戳如何帮助防止 Web 服务中的重放攻击

     2023-02-19     160

关键词:

【中文标题】时间戳如何帮助防止 Web 服务中的重放攻击【英文标题】:How does Timestamp helps in preventing Replay Attacks in webservices 【发布时间】:2012-04-18 19:21:18 【问题描述】:

我正在尝试理解 Web 服务中请求标头中时间戳的概念,但不知何故仍然无法完全理解它是如何工作的。

如果有人能解释时间戳在 Web 服务的请求和响应中的端到端使用,我将不胜感激。

真的是万无一失的防止重放攻击的方法吗?

【问题讨论】:

【参考方案1】:

时间戳本身是不够的,但通常它与散列机制相结合以保证值没有被篡改。

这个想法是客户端生成参数,并使用他们的私钥对参数进行哈希处理。 [哈希 + 原始值 + 公钥] 然后随请求一起发送。服务器可以使用公钥查找私钥,并确保参数正确。

时间戳与一些阈值一起使用,以确保特定请求不能被多次使用。如果阈值很小(几百毫秒),那么重放攻击几乎是不可能的。

【讨论】:

时间戳的值是否加密?服务器如何验证传入的请求具有有效的时间戳并且在阈值内 @Kunal - 就像我说的那样,客户端对输入参数进行哈希处理并将哈希值与输入一起发送。哈希服务器作为校验和防止篡改。服务器使用与用户公钥对应的私钥来计算自己的参数散列。如果两个哈希匹配,那么您知道提供的值是合法的,并且没有被篡改。 @Kunal,没有时间戳不加密,应该在soap头中。 @Don - 如果您使用的是 SOAP。但是时间戳作为校验和的一部分被加密,这正是 Digest 的用途,它是参数的散列,以验证它们没有被篡改。时间戳与散列版本一起作为校验和发送。这不是仅适用于 SOAP 的技术,因为它也用于 JSON Web 服务。【参考方案2】:

时间戳没有加密,应该在soap头中。

    <wsu:Timestamp wsu:Id="timestamp">
        <wsu:Created>2014-07-01T11:30:28.123+05:30</wsu:Created>
        <wsu:Expires>2014-07-01T11:35:28.123+05:30</wsu:Expires>
    </wsu:Timestamp>

如果过期时间在创建时间之后很短,它可以最大限度地减少重放攻击。 实际上,它不仅仅是时间戳。您应该将时间戳摘要添加到 SignedInfo 部分。

<ds:Reference URI="#timestamp">
    <ds:Transforms>
        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
            <InclusiveNamespaces PrefixList="wsse soap" xmlns="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </ds:Transform>
    </ds:Transforms>
    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
    <ds:DigestValue>TGgFBvglhb+jZCvjV0+oVnNaivpVBp5iVbJEqkTfaCU=</ds:DigestValue>
</ds:Reference>

所以在服务器端,这些摘要必须匹配。即使这还不是全部,那么您使用私钥对整个 signedInfo 进行签名,并将签名值添加到 Signature 元素,如下所示。

<ds:SignatureValue>jdO5GIZ9v1VTngFZcMpz5hz62RwToq2W24A9KhJ5JNySZW1AHhd3s+eTduZZPD0Ok6Wtgzu5kquK
    IinPdi5IbGjlg6mXGDbVkLd79RBdnbzFxsJFBtRr9r3mQZp9xfU7zSJW3kbizz6Jjk3h+S2nNbUu
    f7rFrNN53ciRtj9RlKzQzmW7BDaFuq18DUfcr70muSkmd4DIqxYDGScjEjgIqLE2pYwIdDDRUGPD
    MuwuIN3DgB051QwcE75SVrKBKsTHmFADmN3nKzmQ/JUQuLot0vW6WUFRMLVlAcl5C09SGPOcpow2
    kjbuWx/bI7Aj4nAaAnmAYsWKIA3xVao+nPBOWmM0Lg7kpC4Dr5DwahmjH0/78aVUU23DEiMc0kR0
    YDg5CxD8MUuj24w8tAjuzoHrvcsIYw+vWCTKvucnXwTlZ+K3QFB6gkct2zVOyQeYaPpkAnmPYS3W
    DDpNmsx3lDcNr+5QWTsUbSQaFDddjHT/zoOJ8+iZKY/RujOI5vfXVwgN</ds:SignatureValue> 

现在我们可以确保重放攻击是不可能的。由于其他人不能拥有相同的私钥,因此无法更改时间戳并仍然具有有效的签名。

【讨论】:

.net添加时间戳防止重放攻击

...就会参数服务器压力增大,数据紊乱的后果。而使用添加时间戳的方式可以解决这一问题。简单的Demo如下:privatereadonlystringTimeStamp=ConfigurationManager.AppSe 查看详情

重放攻击

...改。但这种方式防止不了重放攻击。3.重放攻击的防御1)时间戳验证请求时加上客户端当前时间戳,同时签名(签名是为了防止会话被劫持,时间戳被修改),服务端对请求时间戳进行判断,如超过5分钟,认定为重放攻击,请求... 查看详情

重放攻击(replayattacks)

...改。但这种方式防止不了重放攻击。3.重放攻击的防御1)时间戳验证请求时加上客户端当前时间戳 查看详情

重放攻击(replayattacks)

...改。但这种方式防止不了重放攻击。3.重放攻击的防御1)时间戳验证请求时加上客户端当前时间戳 查看详情

防止重放攻击最有效的方法是

防止重放攻击的最有效的方法是使用一个时间戳和会话密钥,每次传输数据时,发送一个由时间戳和会话密钥组成的哈希值来标识这次传输。然后在接收方检查这个哈希值,当重放攻击发生时,它们接收到的哈希值将与最初传输... 查看详情

https如何防止重放攻击?

参考技术A客户端拼接字符串规则如下:接口+参数+时间戳+secretID(如果不是做对外开放性的API,是内部产品调用的话那么secretID可以是写死的一个ID值)将以上字符串用对称加密,作为一个sign参数,请求服务端。比如接口,login... 查看详情

摘要式身份验证如何防止重放攻击?

...文标题】:Howdoesdigestauthenticationpreventsreplayattacks?【发布时间】:2010-10-2709:29:50【问题描述】:我在***上发现了很多关于摘要式身份验证的问题。我找不到摘要身份验证如何防止重放攻击?我使用fiddler工具来拦截对服务器的http请... 查看详情

如何防止 PHP、csrf、xsrf 中的表单重放/中间人攻击

...:Howtopreventformreplay/man-in-the-middleattackinPHP,csrf,xsrf【发布时间】:2010-12-0510:20:13【问题描述】:我有一个网络表单,我正在使用PHP。我知道表单可以被操纵(我相信它被称为重放攻击或中间人攻击)。所以我想使用一些真实性令... 查看详情

如何确保api接口安全呢?

...超时、重放。token授权认证:防止未授权用户获取数据、时间戳:防止超时重放、签名:防止数据篡改HTTPS:防止数据明文传输如果时间差大于一定时间(比如:1分钟),则认为该请求失效,防止超时重放比如queryString、header、bo... 查看详情

防止重放攻击 appStoreReceiptURL 应用收据

...文标题】:PreventreplayattacksappStoreReceiptURLappreceipts【发布时间】:2018-09-2622:54:49【问题描述】:我们有一项服务器端服务,我们只想向付费iOS应用的有效用户提供该服务。(请注意,这是一款付费iOS应用,而不是带有IAP的免费应... 查看详情

在 HTTP 连接中使用基于令牌的身份验证时如何防止重放攻击

...replayattackswhenusingtokenbasedauthentificationinanHTTPconnection【发布时间】:2017-09-0518:32:16【问题描述】:在使用基于令牌的身份验证(例如:JSONWeb身份验证)时,如何防止重放攻击并向我的应用程序添加另一层加密?【问题讨论】:【... 查看详情

重放攻击(replyattacks)

...而达到认证通过的目的。我们可以通过加密,签名的方式防止信息泄露,会话被劫持修改。但这种方式防止不了重放攻击。3.重放攻击的防御1 查看详情

api接口如何防止参数被篡改和重放攻击?(代码片段)

...架构,那么就不可能避免的需要服务对外提供API,那么如何保证对外的API的安全呢?即生鲜电商中API接口防止参数篡改和重放攻击目 查看详情

java编程:api接口防止重放攻击(重复攻击)(代码片段)

定义我们在进行API接口设计时,一般都要考虑接口的防止篡改攻击和防止重放攻击。防篡改攻击请参考我的另一篇博客:Java编程:API接口防篡改、签名、验签原理,本篇文章主要介绍防止重放攻击。重放攻击(Repla... 查看详情

重放攻击

...到认证通过的目的。  我们可以通过加密,签名的方式防止信息泄露,会话被劫持修改。但这种方式防止不了重放攻击。 重放攻击的防御(保证请求一次有效):  HTTPS连接过程(https协议就是http+ssl协议): &nb... 查看详情

如何防止android中的拒绝服务(DOS)攻击?

...文标题】:Howtopreventdenialofservices(DOS)attacksinandroid?【发布时间】:2018-12-2706:13:15【问题描述】:我在我的安卓应用程序中使用了地图。我传递了起点和终点纬度,并从地图url获取数据,然后解析响应。但在审核下面标记为DOS攻击... 查看详情

身份认证防止重放攻击的challenge-response方法

或者叫询问-应答机制。基于挑战/应答(Challenge/Response)方式的身份认证系统就是每次认证时认证服务器端都给客户端发送一个不同的"挑战"字串,客户端程序收到这个"挑战"字串后,做出相应的"应答",以此机制而研制的系统.认... 查看详情

如何防止sql注入攻击?

1,避免将用户提供的输入直接放入SQL语句中,最好使用准备好的语句和参数化查询,这样更加安全。2,不要将敏感数据保存在纯文本中,加密存储在数据库中的私有或机密数据,这样可以提供另一级保护,以防止攻击者成功地... 查看详情