开发安全之:Server-Side Request Forgery

这篇具有很好参考价值的文章主要介绍了开发安全之:Server-Side Request Forgery。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Overview

 函数 fsockopen() 将使用资源 URI 的用户控制数据启动与第三方系统的网络连接。攻击者可以利用此漏洞代表应用程序服务器发送一个请求,因为此请求将自应用程序服务器内部 IP 地址发出。

Details

当攻击者可以影响应用程序服务器建立的网络连接时,将会发生 Server-Side Request Forgery。网络连接源自于应用程序服务器内部 IP 地址,因此攻击者将可以使用此连接来避开网络控制,并扫描或攻击没有以其他方式暴露的内部资源。 

示例:在下列示例中,攻击者将能够控制服务器连接至的 URL。

$url = $_GET['url']; 
$c = curl_init(); 
curl_setopt($c, CURLOPT_POST, 0); 
curl_setopt($c,CURLOPT_URL,$url); 
$response=curl_exec($c); 
curl_close($c); 

攻击者能否劫持网络连接取决于他可以控制的 URI 的特定部分以及用于建立连接的库。例如,控制 URI 方案将使攻击者可以使用不同于 http 或 https 的协议,类似于下面这样:

- up:// - ldap:// - jar:// - gopher:// - mailto:// - ssh2:// - telnet:// - expect://

攻击者将可以利用劫持的此网络连接执行下列攻击: - 对内联网资源进行端口扫描。 - 避开防火墙。 - 攻击运行于应用程序服务器或内联网上易受攻击的程序。 - 使用 Injection 攻击或 CSRF 攻击内部/外部 Web 应用程序。 - 使用 file:// 方案访问本地文件。 - 在 Windows 系统上,file:// 方案和 UNC 路径可以允许攻击者扫描和访问内部共享。 - 执行 DNS 缓存中毒攻击。

Recommendations

请勿基于用户控制的数据建立网络连接,并要确保请求发送给预期的目的地。如果需要提供用户数据来构建目的地 URI,请采用间接方法:例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。 但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大,维护难度过大。因此,在这种情况下,程序员通常会采用执行拒绝列表的办法。

在输入之前,拒绝列表会有选择地拒绝或避免潜在的危险字符。但是,任何这样一个列表都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一个字符列表,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。 此外,如果需要,还要确保用户输入仅用于在目标系统上指定资源,但 URI 方案、主机和端口由应用程序控制。这样就可以大大减小攻击者能够造成的损害。文章来源地址https://www.toymoban.com/news/detail-812472.html

到了这里,关于开发安全之:Server-Side Request Forgery的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • appium踩坑(VIVO手机)报错:An unknown server-side error occurred while processing the command.Original error

    appium报错:Failed to create session. An unknown server-side error occurred while proces....... 1、appium管理员身份运行,重新填写配置中的ANDROID_HOME和JAVA_HOME 2、appium地址从127.0.0.1 改为0.0.0.0 3、运行Inspector host地址改为localhost其他保持不变 可成功运行Inspector,不知道哪一步解决的,总之在127.0

    2024年04月28日
    浏览(45)
  • Appium如何解决报错:An unknown server-side error occurred while processing the command. Original error: Er

    使用appium客户端连接小米手机失败,完整报错信息如下: An unknown server-side error occurred while processing the command. Original error: Error executing adbExec. Original error: ‘Command ‘{已隐藏}/Library/Android/sdk/platform-tools/adb -P 5037 -s fca2117a shell settings delete global hidden_api_policy_pre_p_apps’ exited with c

    2024年04月15日
    浏览(72)
  • 跨站点请求伪造攻击 - Cross Site Request Forgery (CSRF)

    最好理解CSRF攻击的方式是看一个具体的例子。 假设你的银行网站提供一个表单,允许当前登录用户将钱转账到另一个银行账户。例如,转账表单可能如下所示:

    2024年01月21日
    浏览(49)
  • 【SEED LAB】Cross-Site Request Forgery (CSRF) Attack Lab -跨站请求伪造

    实际上,用户网页对于网址的请求分为两种。一种是用户浏览器发送给相同网站的数据,被称为 same-site request 。相反,用户浏览器发送给其他网站的数据被称为 cross-site request 也就是跨境请求。 在HTTP传输过程中,产生的响应形式一般分成两种。一种是 GET 型,另一种是 POST

    2024年02月09日
    浏览(42)
  • Server side event (SSE)实现消息推送功能

     在开发web项目时,有一个需求是: 后端服务器 要 主动地 、 不断地 推送消息给 客户端网页 。要实现该需求,需要先考虑几个常用的技术方案: 在客户端网页用 fetch 、 XmlHttpRequest 发送请求是 行不通 的,因为这类请求在后端返回一次数据之后就会中断连接,导致后端无法

    2024年02月06日
    浏览(46)
  • NacosException: Request nacos server failed

    2.1.2 客户端可引用的版本不一致导致!

    2024年02月13日
    浏览(71)
  • Nacos 版本不一致报错: Request nacos server failed

    在做微服务开发中,测试环境使用Nacos没有问题,但是生产环境服务启动一直报错: 代码没有改动,测试环境没问题,但是生产环境有问题呢?首先看一下两者不同的地方,大多数都是 环境配置 的问题。 查看 Nacos 服务的版本,查看 Nacos 控制台首页左上角就能看到版本号:

    2024年02月12日
    浏览(66)
  • 操作Eureka出现Cannot execute request on any known server

    客户端操作Eureka出现Cannot execute request on any known server 这可能是因为你没有在application.yml中配置 spring.application.name 导致注册到eureka上的状态名称不对。通常注册到Eureka默认为 ip:服务名:端口 ,若客户端按照默认这个来操作上下线,需要访问eureka看看这个实例的状态名称是否正

    2024年02月14日
    浏览(45)
  • 【k8s】Error from server (ServiceUnavailable): the server is currently unable to handle the request

    安装metrics-server后,pod启动时成功的就是一直报这个错。网上找了很多放法,不管用,可以试试。  解决方法:新增 hostNetwork: true 到metries-server.yaml: 参考地址:kubernetes - Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io) - Stack Overflow

    2024年02月11日
    浏览(229)
  • Warning: Could not create server TCP listening socket Cannot assign request

    一、问题:docker部署redis时发现docker ps命令查看redis端口号为空  二、原因:在网上查找基本都是6379端口被占用 三、解决方法 1、先docker stop停掉redis容器 2、通过修改redis挂载在linux上的redis.conf文件,将bind 127.0.0.1ip地址放开,之前注释掉了。 bind 127.0.0.1 这个是绑定了我们的主

    2024年02月03日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包