W3C说,有在HTML5.1一个新的属性称为nonce
的style
和script
可以通过一个网站的内容安全策略中使用.
我搜索了它,但最终没有得到它实际上这个属性做什么和使用它时会发生什么变化?
我正在运行一个网站,并且有一个评分系统可以为您提供玩游戏次数的积分.
它使用散列来证明http请求的完整性,因此用户无法改变任何东西,但是我担心可能发生,有人发现他们不需要改变它,他们只需要获得高分,并复制http请求,标题和所有.
以前我被禁止防止这种攻击,因为它被认为是不可能的.但是,既然已经发生了,我可以.http请求源自Flash游戏,然后由php验证并且php将其输入数据库.
我很确定nonce会解决这个问题,但我不确定如何实现它们.设置nonce系统的常用且安全的方法是什么?
我一开始误解了OAuth的时间戳实现,认为这意味着时间戳不会超过当前时间30秒内被拒绝,但事实证明这是错误的,原因是我们无法保证无论时区如何,每个系统时钟都足够同步到分钟和秒.然后我再次阅读它以获得更清晰:
"除非服务提供商另有规定,否则时间戳以自1970年1月1日00:00:00 GMT以来的秒数表示.时间戳值必须是正整数,并且必须等于或大于之前使用的时间戳.请求."
来源:http://oauth.net/core/1.0/#nonce
这意味着时间戳仅与来自同一源的先前请求进行比较,而不是与我的服务器系统时钟进行比较.
然后我在这里阅读更详细的描述:http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iii-security-architecture/
(TL; DR? - 跳到下面的粗体部分)
为了防止再次使用受损的请求(重播),OAuth使用nonce和timestamp.术语nonce表示"一次使用的数字",是一个唯一且通常是随机的字符串,用于唯一标识每个已签名的请求.通过为每个请求提供唯一标识符,服务提供商可以防止多次使用请求.这意味着Consumer为发送给服务提供者的每个请求生成唯一字符串,并且服务提供者跟踪用于防止它们第二次被使用的所有nonce.由于nonce值包含在签名中,因此攻击者无法在不知道共享密钥的情况下更改它.
使用nonce对于服务提供商而言可能非常昂贵,因为他们要求永久存储所有收到的nonce值.为了简化实现,OAuth为每个请求添加了一个时间戳值,允许服务提供者仅在有限的时间内保留nonce值.当请求的时间戳早于保留的时间范围时,它将被拒绝,因为服务提供商不再具有该时间段的随机数.可以安全地假设在允许的时间限制之后发送的请求是重放攻击.OAuth提供了一种实现时间戳的通用机制,但实际实现只留给每个服务提供者(许多人认为应该由规范重新访问).从安全角度来看,真正的nonce是timestamp值和nonce字符串的组合.只有它们一起提供永久的唯一值,攻击者永远不能再使用它.
我感到困惑的原因是,如果Nonce仅使用一次,为什么服务提供商会根据时间戳拒绝?"服务提供商不再具有该时间段内的随机数"对我来说很困惑,并且听起来好像只能在上次使用时间的 30秒内重新使用该随机数.
所以有人可以为我清除这个吗?如果nonce是一次性使用而且我没有将时间戳与我自己的系统时钟进行比较(因为这显然不可靠),时间戳的重点是什么.有意义的是,时间戳只相对于彼此,但是由于具有独特的随机数要求,它似乎无关紧要.
RMB点击后出现的上下文菜单有一个名为Stats for nerds的选项,之后左上角会出现另一个菜单.
与之相关的参数之一是CPN.那是什么意思?
有人可以分享在Python中为OAuth请求创建nonce的最佳实践吗?
我试图在python中编写一个简单的工作证明nonce-finder.
def proof_of_work(b, nBytes):
nonce = 0
# while the first nBytes of hash(b + nonce) are not 0
while sha256(b + uint2bytes(nonce))[:nBytes] != bytes(nBytes):
nonce = nonce + 1
return nonce
Run Code Online (Sandbox Code Playgroud)
现在我尝试进行多处理,因此它可以使用所有CPU内核并更快地找到nonce.我的想法是multiprocessing.Pool
多次使用和执行函数proof_of_work,传递两个参数num_of_cpus_running
,this_cpu_id
如下所示:
def proof_of_work(b, nBytes, num_of_cpus_running, this_cpu_id):
nonce = this_cpu_id
while sha256(b + uint2bytes(nonce))[:nBytes] != bytes(nBytes):
nonce = nonce + num_of_cpus_running
return nonce
Run Code Online (Sandbox Code Playgroud)
所以,如果有4个核心,每个核心将计算这样的随机数:
core 0: 0, 4, 8, 16, 32 ...
core 1: 1, 5, 9, 17, 33 ...
core 2: 2, …
Run Code Online (Sandbox Code Playgroud) 在基于摘要的身份验证中,nonce由服务器生成.但是,在基于OAuth的身份验证中,nonce由客户端生成.我想知道是否有人知道差异的原因?
在试图让我开发更安全的当前应用中,我一直在阅读有关CSRF令牌,并杜撰 - 我想我已经掌握了CSRF令牌背后的想法,但我无法找到"好和简体"资源和Nonces的例子.
我的问题很简单,CSRF令牌和Nonce是一样的吗?从目前为止我可以收集到的是,这两种方法都有不同的技术来实现相同的目标,还是我误解了什么?
如果它们不同,你是否足够好提供一些示例代码或指向我的一些链接,我可以在其中了解更多关于如何在PHP应用程序中实现nonce.
谢谢!
我有一个ASP.NET MVC 5应用程序,可以对Azure Active Directory进行身份验证.我希望在整个应用中启用SSL.因此利用全球过滤器如下:
public class FilterConfig
{
/// <summary>
/// Registers the global filters.
/// </summary>
/// <param name="filters">The filters.</param>
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new RequireHttpsAttribute());
}
}
Run Code Online (Sandbox Code Playgroud)
在此之后,我还将项目属性中的"启用SSL"设置为true.这给了我以下SSL URL - > https:// localhost:34567.我将项目更新为在"项目URL"中"服务器"下的"Web选项卡"下的IIS Express路径中.但是在运行该站点时,我遇到以下错误:
IDX10311:RequireNonce为'true'(默认值),但validationContext.Nonce为null.nonce无法验证.如果您不需要检查nonce,请将OpenIdConnectProtocolValidator.RequireNonce设置为"false".
我有认证.在网站上启用.我使用Azure Active目录.
安全代码如下:
app.UseOpenIdConnectAuthentication(
new OpenIdConnectAuthenticationOptions
{
ClientId = clientId,
Authority = authority,
PostLogoutRedirectUri = postLogoutRedirectUri
});
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Audience = audience,
Tenant = tenant,
});
Run Code Online (Sandbox Code Playgroud)
认证.正在从web.config中读取值,如下所示:
<add key="ida:ClientId" value="<some_guid>" />
<add key="ida:Audience" value="https://localhost:34567/" />
<add key="ida:AADInstance" …
Run Code Online (Sandbox Code Playgroud) 有没有人成功地将 CSP 添加到 Nuxt 应用程序?
我尝试过Helmet,但它似乎与 nuxt.config.js 文件不兼容。
还尝试在 Nuxt的Render 属性上添加 csp ,但在某些脚本需要 nonce 时遇到了问题。
这是我的 nuxt.config.js 中 Render 属性的要点,这对吗?
你如何在 Nuxt 中生成随机数?
render: {
csp: {
hashAlgorithm: 'sha256',
policies: {
'script-src': [
'self',
'unsafe-inline',
'http://assets.adobedtm.com',
'https://cdn.polyfill.io/',
'https://www.everestjs.net',
'https://www.google-analytics.com',
'http://localhost:8001',
"'sha256-<hash>'"
],
},
reportOnly: false,
addMeta: true
}
},
Run Code Online (Sandbox Code Playgroud)