由于跨站点脚本攻击,我试图验证我网站中的输入!
<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 =""
!!!我做错了什么
请注意,Javascript中的任何东西(验证、编码或其他任何东西(都无法抵御反射或存储的XSS。您需要对写回页面的输出进行编码(可能是在服务器端(,但问题中没有显示这一部分。XSS默认情况下是一个输出编码问题,它与输入值无关,尽管如果足够严格并且在正确的情况下,服务器端输入验证也可能会阻止它
然而,如果这是您试图阻止的DOM XSS,那么最好在Javascript中实现正确的输出处理(例如使用jQuery的.text()
而不是.html()
等等(,而不是试图控制输入字段上的输入。
您的值总是空的,因为有两个输入具有相同的ID。下面是一个使用两个不同ID的示例(formGroupExampleInput和formGroupExaampleInput1(
$( 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()
和test()
或exec()
有关regExp 的更多信息
<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>
我已经用replace((解决了我的问题(在DOM中(
function validateMyForm(){
regex = /[`~!@#$%^&*()_|+-=?;:'",.<>{}[]\/]/g;
$('#formGroupExampleInput1').val($('#formGroupExampleInput1').val().replace(regex,' '));
$('#formGroupExampleInput2').val($('#formGroupExampleInput2').val().replace(regex,' '));}
我用纯文本替换了所有不允许的字符,并以他的方式防止脚本的注入!!