Javascript输入问题

Javascript input issue

本文关键字:问题 输入 Javascript      更新时间:2023-09-26

我已经编写了一个代码,用于在提交表单时重定向页面。我有一个下拉菜单和该形式的文本框。我输入</script>作为文本框的输入,这导致了正常的执行,但屏幕上有);

这是我从我的火虫工具中得到的

<script type="text/javascript">
loadSearch('Customer','
</script>
'); 

用于提交的 PHP 代码

<?php
if($_POST['searchButton']){
    echo "<script type='text/javascript'>loadSearch('".$_REQUEST['search_details']."','".$_REQUEST['search_input']."'); </script>";
}
?>

JAVASCRIPT

function loadSearch(selM,selK){
    document.location.href="index.php?pg=search&selM="+selM+"&selK="+selK;
}//loadSearch

注意:文本框$_REQUEST['search_input'],如果文本框以</script>作为输入

服务器端代码中存在严重漏洞。您应该始终使用 htmlspecialchars 等方法清理由用户输入产生的字符串。

取代:

$_REQUEST['search_details']

$_REQUEST['search_input']

跟:

htmlspecialchars($_REQUEST['search_details'], ENT_QUOTES, 'UTF-8')

htmlspecialchars($_REQUEST['search_input'], ENT_QUOTES, 'UTF-8')

不这样做会使您的网站容易受到攻击,恶意用户可能包含脚本来窥探您的用户。此函数的作用是将特殊字符(如<)转换为 html HTML 字符实体(如&lt;),以便客户端的浏览器无法将其解释为代码。

问题是您将请求值转储到页面中而不对它们进行任何转义。由于这是JavaScript,一个快速的解决方法是使用json_encode()将值编码为JSON:

<?php
if($_POST['searchButton']){
    echo "<script type='text/javascript'>loadSearch(".
           str_replace(json_encode($_REQUEST['search_details']), '<', ''x3C') . ", " .
           str_replace(json_encode($_REQUEST['search_input']), '<', ''x3C').
           ");</script>";
}
?>

此外,您的函数应该使用 encodeURIComponent()

function loadSearch(selM,selK){
    document.location.href="index.php?pg=search&selM="+
                           encodeURIComponent(selM) + "&selK=" + 
                           encodeURIComponent(selK);
}

但问题仍然存在:如果您真正想做的是将用户重定向到搜索页面,那么为什么要首先使用这种迂回的脚本方法?为什么不直接从您的 PHP 进行重定向?

为什么你不考虑使用没有任何php的纯JavaScript?

<input type="text" id="selM">
<input type="text" id="selK">
<input type="button" onclick="loadSearch(document.getElementById('selM').value,document.getElementById('selK').value);">