我在编辑来自用户的帖子时使用以下网址:
../post/edit/3 //If the id of the post is 3 for example
为了避免用户故意修改 url,例如 /post/edit/5,我使用以下逻辑来确保用户在他不编辑帖子时不会编辑帖子有权限:
if (//user is allowed to edit post){
//edit post
}
else {
throw new AccessDeniedException('You do not have the permission to edit this post');
}
这是您编辑帖子时使用的一般方法吗?有没有办法做一些更干净的事情,以便用户无法使用 url 中的帖子 ID?
我越想越觉得我从来没有在关注安全的网站上看到这样的 url 中有 id。所以,我同意我们仍然可以使用 id 并检查用户是否可以显示/看到这个 id,但用户仍然可以做太多事情。 对 ID 进行哈希处理不是更好吗,允许我们使用任何可用的算法生成新的加密 ID:
<?php
echo hash('md5', 'id_to_edit');
?>
在 url 中保护 id 的标准方法是什么?一般来说,在 url 中显示诸如 id 之类的信息是个好主意吗?
最佳答案
特殊情况可能需要特殊措施,但在典型情况下,所需要的只是:
很多网站都采用与您最初描述的方式类似的方式。例如,WordPress 的 URL 类似于 https://example.com/wp-admin/post.php?post=112&action=edit。显然,好奇的用户可以选择编辑 post=112 部分。
因此,您可能会考虑的一个标准是:“我是否需要比 WordPress 更关心安全和隐私?”
例如,如果您不希望查看日志文件的人知道哪些 IP 地址正在编辑哪些帖子,您有几个选择。每种方法都需要权衡取舍,因此最好的方法取决于您最关心的问题。
例如:
第一种方法的一个优点是人们可以使用书签返回页面。你可能不想要那样。或者你可能会。取决于您的应用。
第二种方法的一个优点是(例如)Google Analytics(分析)不会显示一个帖子 ID 是否被反复访问/编辑,或者是否有多个帖子 ID 被访问/编辑。这对您来说可能很重要,具体取决于此类信息是否会告诉某人某些信息以及谁有权访问您的 Google Analytics(分析)资料。或者它可能根本不重要。
还有很多其他可能的考虑因素,例如性能。
顺便说一句,如果您确实使用 MD5,请确保在输入中包含攻击者不会知道的内容。否则,攻击者通过查找表反转发现的散列并为连续的帖子 ID 生成更多合法散列将是微不足道的。在 PHP 中,您需要执行以下操作:
hash('md5', $some_hard_to_guess_secret_string . $data_you_wish_to_hash);
没有适用于所有情况的单一最佳实践。但在典型情况下,不需要哈希 post id 值,甚至不需要通过 POST 发送。在典型情况下,请确保使用 SSL(这样 session 就不会被劫持)并在执行任何操作之前检查用户权限,这样您就可以开始了。
关于php - 安全 : Secure id in a url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11571195/
我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A
在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?
我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("
默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同
我在一个ruby文件中有一个函数可以像这样写入一个文件File.open("myfile",'a'){|f|f.puts("#{sometext}")}这个函数在不同的线程中被调用,使得像上面这样的文件写入不是线程安全的。有谁知道如何以最简单的方式使这个文件写入线程安全?更多信息:如果重要的话,我正在使用rspec框架。 最佳答案 您可以通过File#flock给锁File.open("myfile",'a'){|f|f.flock(File::LOCK_EX)f.puts("#{sometext}")}
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我需要实现具有各种灵活需求的密码安全。这些要求基本上取自Sanspasswordpolicy:Strongpasswordshavethefollowingcharacteristics:Containatleastthreeofthe
安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我尝试使用Net::HTTP向Twitter发送GET请求(出于隐私原因替换了用户ID):url=URI.parse("http://api.twitter.com/1/friends/ids.json?user_id=12345")resp=Net::HTTP.get_response(url)这会在Net::HTTP中引发异常:NoMethodError:undefinedmethodempty?'for#from/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/net/http.rb:1
运行bundle安装时,我收到以下消息:Rubygems2.0.14isnotthreadsafe,soyourgemswillbeinstalledoneatatime.UpgradetoRubygems2.1.0orhighertoenableparallelgeminstallation.这很奇怪,因为在我的RubyGems环境中它说我的RubyGems版本是:2.4.5.1(见下文)~/w/Rafftopia❯❯❯gemenvRubyGemsEnvironment:-RUBYGEMSVERSION:2.4.5.1-RUBYVERSION:2.2.5(2016-04-26patc