Asp.net 允许危险的查询字符串

Asp.net 允许危险的查询字符串,asp.net,Asp.net,我需要能够允许包含诸如“”之类的字符的查询字符串。但是,将id=mi之类的内容替换为URL编码,您可以加密您的id值来回避这个问题。然后您可能需要对加密字符串进行URL编码。我遇到了类似的问题。我选择对查询字符串进行base64编码来解决这个问题。 使用 以字节形式获取字符串 然后 System.Convert.ToBase64String 将其转换为“安全”字符串 要将其取回,请使用: System.Convert.FromBase64String 然后: System.Text.ASCI

我需要能够允许包含诸如“”之类的字符的查询字符串。但是,将id=mi之类的内容替换为URL编码,您可以加密您的id值来回避这个问题。然后您可能需要对加密字符串进行URL编码。

我遇到了类似的问题。我选择对查询字符串进行base64编码来解决这个问题。 使用

以字节形式获取字符串 然后

System.Convert.ToBase64String
将其转换为“安全”字符串

要将其取回,请使用:

System.Convert.FromBase64String
然后:

System.Text.ASCIIEncoding.ASCII.GetString

我想你有一些选择。您可以按照指示操作并关闭ValidateRequest。然后,您需要自己处理任何输入消毒。或者,您可以只允许某些字符,或者让用户使用元语言输入它们,即,在提交到元语言(或Base64)之前,使用“]”代替“]”,或者重新编码这些字符。自己重新编码需要Javascript可用于使用禁止字符的查询。您可能仍然需要执行输入清理

快速插入jquery实现:

 $(document).ready( function() {
    $('form').bind('submit', function() {
        $('form' > 'input[type=text]').each( function(i) {
           if (this.value) {
              this.value = encode(this.value);
           }
        });
    });
 });

 function encode(value) {
    return ...suitable encoding...
 }

谷歌搜索一下,我不这么认为。 异常似乎发生在代码运行之前,因此无法捕获异常。
我喜欢base64之类的编码方法。

我也遇到过同样的问题,但是我偶然发现了这种javascript编码方法:

<script type="text/javascript">  

 var unencodedText = "This is my text that contains whitespaces and characters like  and Ø";  
 var encodedText = "";  
 var decodedText = "";  
 alert('unencodedText: ' + unencodedText);  

 //To encode whitespaces and the 'Ø' character - use encodeURI  
 encodedText = encodeURI(unencodedText);  
 //We see that whitespaces and 'Ø' are encoded, but the '' is still there:  
 alert('encodedText: ' + encodedText);  

 //If we decode it we should get our unencodedText back  
 decodedText = decodeURI(encodedText);  
 alert('decodedText: ' + decodedText);  

 //To also encode the '' we use the encodeURIComponent  
 encodedText = encodeURIComponent(unencodedText);  
 //Now all the characters have been encoded:  
 alert('encodedText: ' + encodedText);  

 //To get our unencodedText back we now need to use the decodeURIComponent  
 decodedText = decodeURIComponent(encodedText);  
 alert('decodedText: ' + decodedText);  

</script>

var unencodedText=“这是我的文本,包含空格和字符,如和”;
var encodedText=“”;
var decodedText=“”;
警报(“未编码文本:”+未编码文本);
//要对空格和“Ø”字符进行编码,请使用encodeURI
encodedText=encodeURI(未编码文本);
//我们看到空格和Ø已编码,但“”仍然存在:
警报('encodedText:'+encodedText);
//如果我们破译它,我们应该把我们未编码的文本取回
decodedText=decodeURI(encodedText);
警报('decodedText:'+decodedText);
//为了也对“”进行编码,我们使用encodeURIComponent
encodedText=encodeURIComponent(未编码文本);
//现在所有字符都已编码:
警报('encodedText:'+encodedText);
//要取回未编码的文本,我们现在需要使用DecodeUri组件
decodedText=decodeURIComponent(encodedText);
警报('decodedText:'+decodedText);
如果您处理的是更复杂的符号,那么您可能希望对url使用encodeUri组件


我从

中偷取了这个gem,它适用于我在页面上创建的链接,但不适用于用户直接在浏览器中键入的链接。如果包含“”,它不是一个格式错误的URL吗?它们不应该分别被编码为%3C和%3E吗?是的,我在我的问题中提出,我也尝试过。还是没有骰子。
<script type="text/javascript">  

 var unencodedText = "This is my text that contains whitespaces and characters like  and Ø";  
 var encodedText = "";  
 var decodedText = "";  
 alert('unencodedText: ' + unencodedText);  

 //To encode whitespaces and the 'Ø' character - use encodeURI  
 encodedText = encodeURI(unencodedText);  
 //We see that whitespaces and 'Ø' are encoded, but the '' is still there:  
 alert('encodedText: ' + encodedText);  

 //If we decode it we should get our unencodedText back  
 decodedText = decodeURI(encodedText);  
 alert('decodedText: ' + decodedText);  

 //To also encode the '' we use the encodeURIComponent  
 encodedText = encodeURIComponent(unencodedText);  
 //Now all the characters have been encoded:  
 alert('encodedText: ' + encodedText);  

 //To get our unencodedText back we now need to use the decodeURIComponent  
 decodedText = decodeURIComponent(encodedText);  
 alert('decodedText: ' + decodedText);  

</script>