草庐IT

关于php:传递和检索referer页面url

codeneng 2023-03-28 原文

Passing and retrieving referer page url

所以我一直在编写一个登录脚本,成功登录后,它会重定向到上一页。我见过几种传递引用 URL 的方法:

  • 使用 $_SERVER['HTTP_REFERER'] - 发送整个引荐来源网址。可能被操纵。所以不值得信任。

  • $_GET 并将引用者作为 url 参数传递。一点都不安全。

  • 在表单中使用隐藏字段。即使使用 POST 也不那么安全。

  • 所以,由于方法 2 具有最大的灵活性,所以我选择了它。问题是:
    如果我在没有域的情况下传递 URL('http://www.domain.com/' 被剥离),然后在重定向时手动添加域,我可以确定生成的 URL 重定向保留在我的域中吗?如果没有,我该怎么做才能确保它不会跑偏?

    (假设不存在带有结果url的页面,则重定向到首页)

    例如:http://www.domain.com/login.php?ref=category/products/product-1.php
    成功登录后,页面被重定向到 'http://www.domain.com/'.$_GET['ref']

    我知道应该做些什么来验证referer url参数:

  • '../' 可以帮助导航到上一个文件夹,如果有,必须将其删除。

  • 在referer url参数中传递的所有标签必须被剥离。

  • 必须删除所有"://"。

    • 不确定我是否真的理解,但存储 url 的会话变量(作为数组)可能是合适的 - 您可以在会话变量中查找上一页并重定向到该页面
    • 在 $_SESSION 中存储如此多的 URL 会对其造成影响吗?在堆栈表单中使用它可能会有点问题,因为我将不得不检查他们是否导航到之前的页面或使用浏览器上的后退按钮。


    小贴士:

  • 您根本不需要在重定向中提供域。所以不要打扰
    如果您不需要重定向到另一个域,则使用域。当然
    你必须检查,如果某个域不是在 $ref 中伪造的
  • 您可以在 $ref 中使用页面别名而不是真正的 url,并在重定向之前构造 url。
  • 唯一真正安全的方法是检查 url 和页面上确实存在的 url
  • 有关关于php:传递和检索referer页面url的更多相关文章

    1. ruby-on-rails - rails : save file from URL and save it to Amazon S3 - 2

      从给定URL下载文件并立即将其上传到AmazonS3的更直接的方法是什么(+将有关文件的一些信息保存到数据库中,例如名称、大小等)?现在,我既不使用Paperclip,也不使用Carrierwave。谢谢 最佳答案 简单明了:require'open-uri'require's3'amazon=S3::Service.new(access_key_id:'KEY',secret_access_key:'KEY')bucket=amazon.buckets.find('image_storage')url='http://www.ex

    2. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

      我正在编写一个小脚本来定位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

    3. ruby-on-rails - Ruby url 到 html 链接转换 - 2

      我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

    4. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

      我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

    5. ruby-on-rails - 如何生成传递一些自定义参数的 `link_to` URL? - 2

      我正在使用RubyonRails3.0.9,我想生成一个传递一些自定义参数的link_toURL。也就是说,有一个articles_path(www.my_web_site_name.com/articles)我想生成如下内容:link_to'Samplelinktitle',...#HereIshouldimplementthecode#=>'http://www.my_web_site_name.com/articles?param1=value1¶m2=value2&...我如何编写link_to语句“alàRubyonRailsWay”以实现该目的?如果我想通过传递一些

    6. ruby - Rack:如何将 URL 存储为变量? - 2

      我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.

    7. ruby - 在 Ruby 中按名称传递函数 - 2

      如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只

    8. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

      如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

    9. ruby - 导轨 4 : column reference "updated_at" is ambiguous with Postgres - 2

      我正在尝试使用“updated_at”字段的日期时间范围查询数据库。前端在JSON数组中发送查询:["2015-09-0100:00:00","2015-10-0223:00:00"]在RailsController中,我使用以下方法将两个字符串解析为DateTime:start_date=DateTime.parse(params[:date_range_arr][0])end_date=DateTime.parse(params[:date_range_arr][1])#...@events=@events.where('updated_atBETWEEN?AND?,start_d

    10. ruby - 如何将 Puma::Configuration 传递给 Sinatra? - 2

      这是我的网络应用:classFront我是这样开始的(请不要建议使用Rack):Front.start!这是我的Puma配置对象,我不知道如何传递给它:require'puma/configuration'Puma::Configuration.new({log_requests:true,debug:true})说真的,怎么样? 最佳答案 配置与您运行的方式紧密相关puma服务器。运行的标准方式puma-pumaCLI命令。为了配置puma配置文件config/puma.rb或config/puma/.rb应该提供(参见examp

    随机推荐