Javascript输入问题

时间:2015-01-12 10:43:30

标签: javascript php

我已经编写了一个代码,用于在提交表单时重定向页面。 我有一个下拉列表和文本框。 我输入</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>作为输入提供

3 个答案:

答案 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字符实体(如&lt;),以便客户端的浏览器无法将其解释为代码。

答案 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