Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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中无法使用替换_Javascript_Regex - Fatal编程技术网

我能';在我的javascript中无法使用替换

我能';在我的javascript中无法使用替换,javascript,regex,Javascript,Regex,我正在尝试获取url中的哈希,以便可以使用这些信息在页面上的不同元素上设置类。这样做非常简单,但我担心这样做可能会容易受到XSS的攻击,我想在使用set变量之前对其进行清理。问题是我不能让它工作 例如,我想将url中名为“hash”的变量设置为“gallery”:www.my-domain.com/#gallery 但我想确保像这样的www.my-domain.com/#Hellomalicious payload不会起作用 问题在于控制台报告以下内容: 您好%3Cscript%3Enasty%

我正在尝试获取url中的哈希,以便可以使用这些信息在页面上的不同元素上设置类。这样做非常简单,但我担心这样做可能会容易受到XSS的攻击,我想在使用set变量之前对其进行清理。问题是我不能让它工作

例如,我想将url中名为“hash”的变量设置为“gallery”:www.my-domain.com/#gallery

但我想确保像这样的
www.my-domain.com/#Hellomalicious payload
不会起作用

问题在于控制台报告以下内容: 您好%3Cscript%3Enasty%20payload%3C/script%3E

我希望得到的只是你好。所以,很明显我做错了什么,但我就是想不出来

这是我的代码:

<script type="text/javascript">
        jQuery(document).ready(function(){
            var hash = document.URL.substr(document.URL.indexOf('#')+1);

            hash = hash.replace(/<script[^>]*?>.*?<\/script>/gi, '').
                     replace(/<[\/\!]*?[^<>]*?>/gi, '').
                     replace(/<style[^>]*?>.*?<\/style>/gi, '').
                     replace(/<![\s\S]*?--[ \t\n\r]*>/gi, '');
            console.log(hash); //Check the result in the console
                if (hash === 'gallery' || hash === 'galleria' || hash === 'galleri') {
                    jQuery('#prod_description').removeClass('uk-active');
                    jQuery('#prod_gallery').addClass('uk-active');
                } else 
                    if (hash === 'relations') {
                    jQuery('#prod_description').removeClass('uk-active');
                    jQuery('#prod_relation').addClass('uk-active');
                } else 
                    if (hash === 'other') {
                    jQuery('#prod_description').removeClass('uk-active');
                    jQuery('#prod_other').addClass('uk-active');
                } else 
                    if (hash === 'promotion') {
                    jQuery('#prod_description').removeClass('uk-active');
                    jQuery('#prod_promotion').addClass('uk-active');                        
                }
            }
        );
    </script>

jQuery(文档).ready(函数(){
var hash=document.URL.substr(document.URL.indexOf(“#”)+1);
hash=hash.replace(/]*?>.*?/gi'')。
替换(//gi'')。
替换(/]*?>.*?/gi'')。
替换(//gi,”);
console.log(hash);//在控制台中检查结果
如果(散列=='gallery'| |散列=='galleria'| |散列=='galleri'){
jQuery('prod#u description').removeClass('uk-active');
jQuery('prod#u gallery').addClass('uk-active');
}否则
如果(哈希==='关系'){
jQuery('prod#u description').removeClass('uk-active');
jQuery(“#prod_关系”).addClass('uk-active');
}否则
如果(散列=='其他'){
jQuery('prod#u description').removeClass('uk-active');
jQuery('#prod_other').addClass('uk-active');
}否则
如果(哈希==='提升'){
jQuery('prod#u description').removeClass('uk-active');
jQuery('prod#u promotion').addClass('uk-active');
}
}
);
我已经尝试过这样的方法:.replace('l','')如果按预期工作,则从结果中删除散列中第一个'l'实例。这让我觉得我的正则表达式是错误的,所以我尝试了一种更简单的方法,比如:.replace(/[^0-9a-z]/gi'),但这也不起作用


有没有关于我做错了什么的想法?

嗯,它是经过编码的,所以你需要对它进行解码

var hash = decodeURIComponent(window.location.hash.substr(1));

除非您将该散列直接放在页面上,否则散列中的脚本标记不会做任何事情,字符串比较中唯一会发生的事情就是不匹配。

它是编码的,所以您需要对其进行解码

var hash = decodeURIComponent(window.location.hash.substr(1));
除非您将该散列直接放在页面上,否则散列中的脚本标记不会做任何事情,字符串比较中唯一会发生的事情就是不匹配。

您可以做一个简单的操作,只需确保不要
评估数据;如果它被发送到服务器端,请确保人员正确处理它

你不应该像这样做任何更换,因为有无限的可能性

例:

您可以做一个简单的操作,只需确保不要
eval
数据;如果它被发送到服务器端,请确保人员正确处理它

你不应该像这样做任何更换,因为有无限的可能性

例:

但我担心这样做可能会容易受到XSS的攻击

您没有-因为您没有在HTML上下文的任何地方输出哈希值

您在这里所做的就是将它与几个不同的文本文本进行比较。如果即使您的
散列
变量包含类似于
foomarial()
-将
foomarial()
gallery
进行比较是绝对无害的,那么这只是一个比较,在这种情况下只会导致false。仅仅比较字符串不会执行任何代码

只要您没有将值插入页面的某个位置,这里就没有XSS风险。您可以完全删除您尝试更换的线路

但我担心这样做可能会容易受到XSS的攻击

您没有-因为您没有在HTML上下文的任何地方输出哈希值

您在这里所做的就是将它与几个不同的文本文本进行比较。如果即使您的
散列
变量包含类似于
foomarial()
-将
foomarial()
gallery
进行比较是绝对无害的,那么这只是一个比较,在这种情况下只会导致false。仅仅比较字符串不会执行任何代码


只要您没有将值插入页面的某个位置,这里就没有XSS风险。您可以完全删除您试图替换的行。

您没有对其进行加密您没有对其进行加密听到这一点我感到非常欣慰。谢谢问题是,我正在考虑扩展脚本,以便它将提供的哈希与页面上所有可用的ID进行比较。原因是我不喜欢像这样硬编码字符串检查。例如,如果我在一个元素上设置ID=“TheBestID”,我希望确保在URL中提供了TheBestID时,我的逻辑起作用。但只要我不把变量“hash”作为输出,我想我应该是安全的。再次感谢!只要您只是比较值,这仍然很好。XSS要求将代码放在文档中,并将其解释为HTML。因此,如果您要执行类似于
someElement.innerHTML=hash,这可能是XSS的问题。听到这个消息我感到非常欣慰。谢谢问题是,我正在考虑扩展脚本,以便它将提供的哈希值与服务器上所有可用的ID进行比较