我正在构建一个简单的HTML页面,我有一个输入字段,后跟一个搜索按钮;这是代码:
<input type="text" id="sfield" placeholder="Write something">
<button id="search">Search!</button>
我正在编写javascript来为按钮和输入字段分配一些操作,当我认为添加一个需要光标在该字段上的功能时,这是一个好主意。搜索开始。我会更好地解释一下:如果有人想要搜索某些东西,它就会像普通的输入字段一样出现并且像那样工作。但是,如果有人尝试启动自动提交表单的脚本,则表示没有插入任何输入。
例如,如果有人试图注入此脚本:
document.getElementById('sfield').value="Some stuff";
document.getElementById('search').click();
搜索会开始,但是有些东西&#34;字符串不会被保存,就像用户单击搜索按钮而不在搜索字段中写入一样。此外,添加行
document.getElementById('sfield').focus();
也应该什么也不做,因此将光标放在字段中的唯一方法是用户手动操作。
我想知道是否有可能做出这样的事情;我已经设法使用EventListener将搜索字段留空了,但我不知道如何让脚本识别用户是否将光标放在字段上。
我不喜欢不使用JQuery,但也可以使用它。任何想法都会被大大接受。感谢。
答案 0 :(得分:0)
在这种情况下,程序需要保留状态。我会这样做......
http://jsbin.com/hopicucuyi/edit?js,console,output
<input type="text" id="sfield" placeholder="Write something" data-validated = "false">
<button id="search">Search!</button>
<script>
const inputField = document.getElementById('sfield');
const searchButton = document.getElementById('search');
inputField.onfocus = () => {
inputField.setAttribute("data-validated", "true")
}
searchButton.onclick = () => {
const isValidated = inputField.getAttribute("data-validated");
console.log('Is Validated: ' + isValidated);
}
</script>
答案 1 :(得分:0)
通常,这些解决方案都不会停止使用浏览器的机器人(这是运行javascript的机器人)。没有100%的解决方案,但是有比检查是否有重点的解决方案更强大的解决方案。记住,JavaScript环境是完全可以从浏览器端控制的。例如,为了克服安全性,我要做的就是将相关输入的状态更改为 data-validated =“ true” ,这样您的安全性就会崩溃。
但是,浏览器供应商已经考虑了这种可能性,并为您提供了鲜为人知的解决方案。查看来自鼠标单击或击键的事件数据。可以生成此事件数据。在以前的浏览器中,过去仅使用 new Event()来欺骗事件比较容易,但是现在,现代的浏览器将特定事件用于键盘和鼠标。欺骗这些行为非常困难的部分是,在某些情况下,某些属性是只读的。更具体地说,存在无法通过javascript设置的事件属性“可信”。如果欺骗 MouseEvent 或 KeyboardEvent ,则“ trusted”属性将设置为false,但是如果使用实际的鼠标或键盘,则“ trusted”属性将设置为true。 / p>
此处isTrusted属性的信息:https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted
注意:这也不是100%,因为该漫游器可以运行键盘/鼠标宏来创建真正的“可信”事件。但是,它确实使系统更难以破解,因为许多人不知道此安全技巧,并且大多数漫游器都没有内置鼠标/键盘控件。如果遇到使用鼠标/键盘的漫游器,则减少了可以进行安全检查,并对事件和接口使用情况进行进一步分析。
如果将此方法与浏览器指纹识别等其他方法结合使用,则会使您的整体反机器人安全性更加强大,并阻止更多可能的机器人。
编辑:不要仅使用此方法和其他方法来混淆代码,以便任何攻击者都必须花时间去混淆和遍历一堆标记不良的函数和加密字符串,如果他们想看看您的安全性如何工作。