Response.Redirect 有时会忽略 URL 编码

2023-12-15

在我当前正在构建的网站中,我们需要大量动态重定向,以维持网站各部分的流量。

我目前正在使用response.redirect 来实现此目的,重定向URL 是在各种按钮的回发方法后面的代码中动态生成的。

这在 95% 的情况下都没有问题,但我注意到有时 URL 会被严重破坏。

在一种情况下,url 是 URLEncoded,因为参数之一有时包含 & 符号,但是重定向会忽略这一点并重定向到非编码版本。

即“page.aspx?qs=first%26second&qs=2&qs=3”被重定向到“page.aspx?qs=first&second&qs=2&qs=3”

发生的另一种情况是响应完全去除了&符号,导致频繁崩溃。

即“page.aspx?qs=1&qs=2&qs=3”被重定向到“page.aspx?qs=1qs=2qs=3”

有谁知道为什么会发生这两种情况?

RESOLVED

抱歉,这是由于我自己的白痴,从管理员重定向到非管理员(不要问),并且没有在几个页面上再次将 & 或 url 编码。

(捂脸)


我想说,发生这种情况的原因是由于Response.Redirect方法在内部起作用。

在内部,Redirect 方法将检查字符串 URL 参数,如果认为有必要,则在实际执行重定向之前对字符串 URL 参数执行一些编码。

这可以通过查看拆解来证明Response.RedirectReflector 中的方法。除其他事项外,Redirect方法执行:

url = this.ApplyRedirectQueryStringIfRequired(url);
url = this.ApplyAppPathModifier(url);
url = this.ConvertToFullyQualifiedRedirectUrlIfRequired(url);
url = this.UrlEncodeRedirect(url);

查看每个函数,都会调用其他函数,例如:

internal static string UrlEncodeNonAscii(string str, Encoding e)
internal static string UrlEncodeSpaces(string str)
private static byte[] UrlEncodeBytesToBytesInternalNonAscii(byte[] bytes, int offset, int count, bool alwaysCreateReturnValue)

这些函数中的每一个都尝试以某种方式对提供的字符串 URL 参数进行编码(或转换)。

根据这个页面:Response.Redirect 和编码的 URI(以及从此处链接的其他内容),执行的编码可能会出现一些问题,具体取决于输入字符串。

看来,避免允许时可能出现的任何编码问题的最佳方法是Redirect进行自己的编码的方法是在将字符串 URL 参数传递给Redirect method.

来自Response.RedirectMSDN 文章:

始终验证 URL 并对其进行编码 传递给 Response.Redirect 到 防止跨站点脚本编写 攻击。有关如何进行的信息 从中删除有害字符 字符串,参见从用户输入中删除有害字符.

请注意,还有以前是错误当不使用完全限定的 URL 时,在 Response.Redirect 方法中进行编码。您使用的 .NET 框架版本是否可能容易受到此问题的影响?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Response.Redirect 有时会忽略 URL 编码 的相关文章

  • 为什么我会收到未找到分析器的警告?

    我创建了一个玩具项目来检查最新的 NET 7 预览版 5 和正则表达式代码生成 它效果很好 所以我对现有项目应用了相同的更改 不是为了生产 而是为了个人生产力 由于某种原因 我收到这些警告 CS8032 An instance of ana
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • 最新 .Net MongoDb.Driver 的连接问题

    我创建了一个 MongoLab 沙箱数据库 我与 MongoChef 连接 效果很好 我通过 Nuget 安装了 MongoDB Driver 2 2 2 我编写了一些简单的 C 演示代码 但就是无法使其工作 连接字符串是直接从 Mongo
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • C# 无法捕获 SerializationException

    我的程序在加载序列化文件的部分遇到问题 如果文件无法反序列化 我希望很好地失败 但由于某种原因 我的程序将中断而不是进入 catch 子句 这是我的代码 using FileStream fs new FileStream openFile
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 组合框下拉位置

    我有一个最大化的表单 其中包含 500px 的组合框控件 停靠在右上角 Width 尝试打开组合框后 列表的一半超出了屏幕 如何强制列表显示在表单中 棘手的问题 我找不到解决这个问题的好办法 只是一个解决方法 添加一个新类并粘贴如下所示的代
  • 无法加载程序集问题

    我收到以下错误 无法加载程序集 错误详细信息 System BadImageFormatException 无法加载文件或程序集 文件 或其依赖项之一 该程序集是由比当前加载的运行时更新的运行时构建的 无法加载 该程序集是使用 Net Fr
  • Linq 合并列表

    我的课 public class Foo public int A get set public List
  • 如何将 Q 格式整数转换为浮点数(反之亦然)?

    我四处搜寻 找不到一个很好的问题来回答这个问题 给定一个整数 使用Q Format https en wikipedia org wiki Q number format 如何将该数字转换为普通浮点类型 反之亦然 如何将浮点类型转换为Q F
  • .NET 5 EF Core SaveChangesAsync 因错误而挂起

    尽管这个问题有很多结果 但没有一个真正给我明确的答案 每次我尝试通过 AddAsync 和 SaveChangesAsync 方法插入错误数据 例如重复的主键 时 我都会看到以下日志 执行 DbCommand 失败 15 毫秒 我还在 SQ
  • C# 枚举到字符串自动转换?

    是否可以让编译器自动将我的 Enum 值转换为字符串 这样我就可以避免每次都显式调用 ToString 方法 这是我想做的一个例子 enum Rank A B C Rank myRank Rank A string myString Ran
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • Xcode 7 调试器不会中断内联标头函数

    过去五年我一直在各种 C 项目中使用 Xcode 没有出现这个问题 今天 我打开了一个较旧的项目 大约 2 年前 并尝试通过在该函数中放置一个活动断点来调试头文件中的内联函数 由于某种原因 调试器不会中断此代码 但是 如果我在调用该函数的
  • 从对列表创建邻接列表类型结构

    在 C 中 我有 class Pair int val1 int val2 我有一个来自以下来源的配对列表 List
  • 从脚本启用/禁用 GameObject 组件 [Unity3D]

    我需要获取一个脚本中设置的布尔值 放入名为 bouclier 的变量 以启用或禁用游戏对象 该变量位于游戏对象 Player 中 此处右下角 我需要启用或禁用这个游戏对象 Bouclier01 为此 我将脚本附加到游戏对象 Bouclier

随机推荐

  • C++从字符串到对象标识符的转换[重复]

    这个问题在这里已经有答案了 我正在用 C 编写一个程序 该程序从外部文件读取一些数据以设置静态变量的值 是否可以将字符串转换为对象标识符 例如 将字符串 CheckBox Unchecked 转换为对象 CheckBox unchecked
  • Python Tf idf算法

    我想在一组文档中找到最相关的单词 我想在 3 个文档上调用 Tf Idf 算法 并返回一个包含每个单词及其频率的 csv 文件 之后 我将只选取那些数字较高的并使用它们 我发现这个实现可以满足我的需要https github com mcc
  • C# 找不到统一自动生成的类

    好的 我正在学习使用新的 InputActions 并且我已经使用创建了一个 C 脚本 https prnt sc oyaj5l 这就是我得到的 GENERATED AUTOMATICALLY FROM Assets PlayerContr
  • 检查元素的滚动高度有时返回 0

    因此 我正在检查一些动态生成的内容的滚动高度 以确定是否在内容中包含更多按钮 用户可以单击更多按钮来展开内容并查看里面的所有内容 然而 每次使用相同的函数有时会说元素的滚动高度为 0 不用说会破坏这些元素的函数 我非常困惑为什么这个函数在
  • 迭代集合并在 Razor 中打印索引和项目

    我的剃刀视图有问题 我有以下内容 public ICollection
  • 如何在代码中更改列表视图中一项的背景

    我继承了ListActivity 我需要更改某些行的代码背景颜色 如何做到这一点 例如第一行设置黄色背景 public class AlarmsActivity extends ListActivity private Activity c
  • 在 Python 中从 XML 获取文本值

    from xml dom minidom import parseString dom parseString data data dom getElementsByTagName data data 变量作为元素对象返回 但我一生都无法在
  • x86 操作码对齐参考和指南

    我正在 JIT 编译器中动态生成一些操作码 并且正在寻找操作码对齐的指南 1 我读过一些评论 简短地 建议 通过在调用后添加 nops 进行对齐 2 我还阅读了有关使用 nop 来优化序列以实现并行性的内容 3 我读到操作对齐有利于 缓存
  • Dotnet :- 如何在窗口表单应用程序中实现 Windows 身份验证?

    我想做一个windows窗体应用程序 想使用windows身份验证来登录用户 它必须在内网中使用 应用程序应接受用户的用户名和密码 并对其进行身份验证 如何实现这一点 您可以使用互操作服务来实现这一点 使用下面的代码 System Runt
  • 如何根据条件删除 Excel 工作表中的行

    我有一个 Excel 工作簿 位于 A 列的 worksheet1 中 如果该列的值 ERR 我希望将其删除 整行 这怎么可能 PS 请记住 我以前从未使用过 VBA 或宏 因此非常感谢详细的描述 手动或使用 VBA 如下所示 使用自动筛选
  • 从文件中读取 C++

    您好 我想将 VTK 文件中的数据读取到我的 C 程序中 这是我的文件通常的外观 积分 2 双 1 2 3 4 点数据2 SCALARS 压力双倍 LOOKUP TABLE 默认值 5 6 标量密度双倍 LOOKUP TABLE 默认值 7
  • 将地图视图缩放到放置图钉的区域

    如果我的地图视图中有 3 个图钉 当地图加载时我将如何缩放到这些图钉 也就是说 当地图加载时 我需要有一个缩放视图 但该视图应该容纳放置在地图中的所有图钉 当地图只有一根图钉时 它就可以工作了 但我无法处理多个引脚的缩放 需要帮助 下面的方
  • bash: C:/Program: 没有这样的文件或目录

    我是 Docker Debezium Bash 和 Kafka 的新手 我正在尝试在 Windows 10 上运行 MSSQL Server 的 Debezium 教程 示例 https github com debezium debezi
  • UIActivityViewController 在 Whatsapp 和所有共享选项中共享文本

    在我的应用程序中我使用了UIActivityViewController在 Whatsapp Facebook 和 Twitter 等中分享文本 我正在使用 iOS 9 和 Xcode 7 2 版本 当我单击 Whatsapp 图标并单击特
  • htaccess 重写导致 500 错误而不是 404

    我最近将这一点代码添加到我的 htaccess file RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME d RewriteRule 1 php L QSA 好吧 我想
  • 如何使用 PowerShell 更改 cmd 的当前目录?

    我使用读取了一些文件PowerShell 并相应地更改当前目录 但我所能做的就是更改当前目录PowerShell的当前目录 而不是调用者的目录 调用该 ps1 文件的 cmd exe 环境 我尝试过的事情 powershell ch dir
  • 将默认设计主题更改为自定义颜色

    我对 Android Studio 很陌生 作为初学者 我创建了一个简单的应用程序 仅用于测试目的并查看 Android studio 材质主题的外观 我目前正在使用最新版本 即 l 预览 Studio 0 8 2版本 在这里 我刚刚创建了
  • 帮助从 .Net 创建 Zip 文件并从 Java 读取它们

    我正在尝试从 Net 创建一个可以从 Java 代码读取的 Zip 文件 我已经使用 SharpZipLib 创建了 Zip 文件 但如果生成的文件根据 ZipLib 库的 CheckZip 函数有效 并且可以通过 WinZip 或 Win
  • 如何使用字母而不是数字来顺序计数?

    有没有一种简单的方法可以在Python中使用字母进行计数 意思是 A 将用作 1 B 将用作 2 依此类推 Z 之后将是 AA AB 等 所以下面的代码将生成 def get next letter last letter return l
  • Response.Redirect 有时会忽略 URL 编码

    在我当前正在构建的网站中 我们需要大量动态重定向 以维持网站各部分的流量 我目前正在使用response redirect 来实现此目的 重定向URL 是在各种按钮的回发方法后面的代码中动态生成的 这在 95 的情况下都没有问题 但我注意到