0

由于跨站点脚本攻击,我尝试验证我网站中的输入!

<form name="SearchInput" class="form-inline filterForm" method="post" action="/annoncen/" onsubmit="validateMyForm();">
          <input type="text" name="searchWord" class="form-control form-search left" id="formGroupExampleInput" placeholder="Text" onkeyup="inputKeyUp(event)"/>
          <input type="text" name="searchLoc"  class="form-control form-search right" id="formGroupExampleInput" placeholder="Place" onkeyup="inputKeyUp(event)"/>
          <button type="submit">search</button>
 </form>

我使用 validate() 插件来防止用户在输入字段中放置脚本

function validateMyForm(){
       var text_value = $('#formGroupExampleInput').val();
       if(text_value!=='/^[a-zA-Z ]*$/') {
            alert("Enter Some Text In Input Field");
            event.preventDefault();
       }}

但每次我得到text_value =""!我究竟做错了什么

4

3 回答 3

1

请注意,Javascript 中的任何内容(验证、编码或其他任何内容)都无法防止反射或存储的 XSS。您需要对写回页面的输出进行编码(大概在服务器端),但该部分未在问题中显示。默认情况下,XSS 是一个输出编码问题,它与输入评估无关,但如果足够严格并且在适当的情况下,服务器端输入验证也可能会阻止它。

但是,如果这是您试图阻止的 DOM XSS,那么在 Javascript 中实现正确的输出处理(例如使用.text()jQuery 而不是.html()等等)而不是尝试控制输入字段上的输入仍然会更好。

于 2018-07-12T12:46:52.747 回答
0

我已经用 replace() 解决了我的问题(在 DOM 中)

function validateMyForm(){
regex = /[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/g;
$('#formGroupExampleInput1').val($('#formGroupExampleInput1').val().replace(regex,' '));
$('#formGroupExampleInput2').val($('#formGroupExampleInput2').val().replace(regex,' '));}

我用纯文本替换所有不允许的字符,并防止以他的方式注入脚本!

于 2018-07-13T09:26:47.297 回答
0

您的值始终为空,因为有两个具有相同 ID 的输入。这是一个具有两个不同 ID 的示例(formGroupExampleInput 和 formGroupExampleInput1)

$( document ).ready(function() {
    $("button").on("click", function (e){    	
      var text_value = $('#formGroupExampleInput').val();
      console.log('your value ' + text_value);
       if(text_value==="") {
            alert("Enter Some Text In Input Field");
            e.preventDefault();
       }
    	 console.log('form is submited');
       //todo remove this e.preventDefault(); to make your form submit
       e.preventDefault();
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form name="SearchInput" class="form-inline filterForm" >
          <input type="text" name="searchWord" class="form-control form-search left" id="formGroupExampleInput" placeholder="Text" />
          <input type="text" name="searchLoc"  class="form-control form-search right" id="formGroupExampleInput1" placeholder="Place" />
          <button type="submit">search</button>
 </form>

关于使用 regExp,您可能应该使用new RegExp()andtest()exec()

有关正则表达式的更多信息

<script type="text/javascript">
var reg=new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
var chaine1="15/12/2017";
var chaine2="1a/bb/2017";
document.write(chaine1+" ");
if (reg.test(chaine1)) {document.write("est bien au format date<BR>")}
else {document.write("n'est pas au format date<BR>")}
document.write(chaine2+" ");
if (reg.test(chaine2)) {document.write("est bien au format date")}
else {document.write("n'est pas au format date")}
</script>

于 2018-07-12T13:03:58.520 回答