Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我是否应该担心在表单元素中使用GET不会';自动URL编码尖括号?_Javascript_Security_Get_Webmatrix_Url Encoding - Fatal编程技术网

Javascript 我是否应该担心在表单元素中使用GET不会';自动URL编码尖括号?

Javascript 我是否应该担心在表单元素中使用GET不会';自动URL编码尖括号?,javascript,security,get,webmatrix,url-encoding,Javascript,Security,Get,Webmatrix,Url Encoding,所以我决定在我的表单元素中使用GET,将它指向我的cshtml页面,并发现(正如预期的那样)它会自动对任何传递的表单值进行URL编码 然而,我随后决定测试它是否编码尖括号,当WebMatrix验证器抛出一个服务器错误警告我传递了一个潜在的危险值时,我意外地发现它没有编码 我对自己说,“好吧,那么我想我将使用Request.Unvalidated[“searchText”]而不是Request.QueryString[“searchText”]。然后,就像任何使用Request.Unvalidat

所以我决定在我的表单元素中使用GET,将它指向我的cshtml页面,并发现(正如预期的那样)它会自动对任何传递的表单值进行URL编码

然而,我随后决定测试它是否编码尖括号,当WebMatrix验证器抛出一个服务器错误警告我传递了一个潜在的危险值时,我意外地发现它没有编码

我对自己说,“好吧,那么我想我将使用
Request.Unvalidated[“searchText”]
而不是
Request.QueryString[“searchText”]
。然后,就像任何使用
Request.Unvalidated
的聪明开发人员一样,我试图确保自己格外小心,但我真的不太了解如何将JavaScript插入URL,所以我不确定是否应该担心这一点。我注意到它编码撇号、引号、括号和许多其他Jav书写特殊字符(事实上,我甚至不确定角括号在JavaScript或URL中是否有特殊意义,但它可能在其中一个中有特殊意义,如果不是两者都有的话。我知道它有助于在C#中表示列表,但无论如何,如果你能找到在HTML页面上获取它的方法,你可以用它编写脚本标记,所以我想这就是为什么WebMatrix的验证器看到它时会对我尖叫的原因。)他们)

我是否应该找到另一种方式提交此表单,而我可以自己截取和编码用户数据,或者在这种情况下使用
Request.Unvalidated
,而不必担心

请注意,正如您可能已经注意到的,我的问题来自WebMatrix C#.net环境

额外问题(如果你想为我节省一些时间,而且你已经知道答案了):如果我使用
Request.Unvalidated
,我将必须对值进行URL解码,还是像
Request.QueryString
那样自动解码

------------------------------------更新----------------------

由于我知道我不希望仅因为用户在其“searchText”中包含尖括号而显示YSOD或自定义错误页面,我知道我必须使用
Request.Unvalidated
,并且我知道一旦值到达cshtml页面,我可以对任何我想要的内容进行编码


所以我想问题真的变成了:我是否应该担心仅基于尖括号的URL内部可能的XSS攻击(或任何其他威胁)

此外,如果这是相关的:


实际上,我使用的值(即“searchText”)直接进入cshtml页面,在该页面中,该值通过一个(相当复杂的)SQL查询运行,该查询查询数据库中的许多表(使用联接和联合,以及别名和基于函数的计算),以确定根据“searchText”找到的匹配数“在每个适用字段中。然后我记住所有这些匹配项的页面位置,根据相关性(由找到的匹配项的类型和数量确定)确定搜索结果顺序,最后使用C#将搜索结果(当然,作为链接)写入页面


我想重要的是要注意,数据库值可以很容易地包含尖括号。我知道到目前为止它是安全的(感谢HTML编码),但我想可能没有必要实际“搜索”我对如何实现最大的安全性和功能体验感到困惑,但如果我选择其中一种方式,我可能不知道我选择了错误的决定,直到为时已晚……

URL和特殊字符

url
http://test.com/?param=“>警报('xss')
在读取和

  • 在模板中打印:
    Hello@param
    (潜在反射/持久化XSS)


  • 或者在Javascript中使用:
    divContent.innerHTML=”

    我知道你在说什么,但我不能只是“接受”服务器端错误。我的意思是,我知道我的web.config文件中的配置被设置为(默认情况下)不显示错误实际是什么,但它仍然太难看而无法接受。而且,是的,我知道你可以(虽然,我还不知道如何)设置一个默认的错误页面,我知道我必须这么做,无论如何,这样最终不会那么难看,但它似乎是一个完整的“糟糕!“对于包含尖括号的简单搜索字符串,错误页仍然有点多。使用这两个选项,您需要正确地转义输出。很少有情况下转义会很棘手(例如,如果您在JavaScript中包含该值)。XSS保护可以捕获一些forgoten输出。实际上,我使用的值(即“searchText”)直接进入cshtml页面,在该页面中,值通过(相当复杂的)SQL查询运行,该查询查询数据库中的许多表(使用联接和联合,以及别名和基于函数的计算),以确定与“searchText”匹配的数量然后我记住所有这些匹配项的页面位置,根据相关性(由找到的匹配项的类型和数量确定)确定搜索结果顺序,最后使用C#编写搜索结果(当然是作为链接)我想重要的是要注意,数据库值可以很容易地包含尖括号。我知道到目前为止它是安全的(感谢HTML编码),但我想可能没有必要实际“搜索”我对如何实现最大的安全性和功能体验感到困惑,但如果我选择了一种或另一种方式,我可能不知道我选择了错误的决定,直到为时已晚……所以我想问题真的变成了:我是否应该担心可能的XSS攻击(或任何其他威胁)仅基于尖括号的URL内部?