我已经编写了一个代码,用于在提交表单时重定向页面。
我有一个下拉列表和文本框。
我输入</script>
作为文本框的输入,导致正常执行但屏幕上显示);
。
这是我从我的firebug工具中得到的
<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>
作为输入提供
答案 0 :(得分:2)
您的服务器端代码存在严重漏洞。您应该始终使用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字符实体(如<
),以便客户端的浏览器无法将其解释为代码。
答案 1 :(得分:0)
\为什么不考虑在没有任何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);">
答案 2 :(得分:0)
问题是您正在将请求值转储到页面中而不进行任何转义。由于这是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中做redirect?