【问题标题】:Prevent inspect element in text field防止在文本字段中检查元素
【发布时间】:2019-02-15 07:23:12
【问题描述】:

这是我的输入字段禁用代码

<input type="text" class="empl_date form-control" id="staffid" name="staffid" value="<?php echo $employeeworks[0]['employeeCode'];?>" arsley-maxlength="6" placeholder=" Schedule Date"  disabled />

如何防止在此字段中检查元素选项?

【问题讨论】:

  • 我认为您必须为整个页面执行此操作,因为在访问整个页面时只能限制一个元素
  • 为什么需要实现这个目标?
  • 使用右键单击任何一个都可以删除禁用的选项。我想阻止它
  • 你不能。已经发送到浏览器,用户可以查看。
  • 在这里提出了类似的问题:stackoverflow.com/questions/7559409/…

标签: php codeigniter inspect-element


【解决方案1】:

不,这是不可能的。

代码检查器是为调试 HTML 和 Javascript 而设计的。他们将始终显示网页的实时DOM 对象。这意味着它会显示您在页面上看到的所有内容的 HTML 代码,即使它们是由 Javascript 生成的。

【讨论】:

  • 很多网站添加了一些脚本来防止F12和上下文菜单
  • 是的,您可以禁用这些按钮,ctrl+shift+Ictrl+shift+CF12ctrl+@9876543 +J 还有更多,我认为你不能只禁用这些按钮。
  • @HienNguyen,但您不能禁用所有方法
【解决方案2】:

正如其他答案中提到的,它不能完全被阻止,一旦它在浏览器中,用户就可以操纵它。 与其考虑如何防止在您的输入中使用检查元素或开发工具,不如考虑您的目标,您想以此实现什么?

如果您想防止输入值被更改,请使用在服务器端生成的一些哈希值,其中包括来自您的 staffid 字段的值并将其存储在隐藏输入中。

当用户提交表单时,只需使用staffid 值和输入的哈希值重新生成哈希值。如果它们不匹配,则用户手动操作了staffid 输入。

例子:

<input type="text" class="empl_date form-control" id="staffid" name="staffid" value="<?php echo $employeeworks[0]['employeeCode'];?>" arsley-maxlength="6" placeholder=" Schedule Date"  disabled />
<input type="hidden" name="hash" value="<?php echo md5($employeeworks[0]['employeeCode'] . 'some salt to avoid user just generating hash with md5 using value only'); ?> /> 

然后在提交时:

$staffid = filter_input(INPUT_POST, 'staffid');
$hash_input = filter_input(INPUT_POST,'hash');

$hash_check = md5($staffid . 'some salt to avoid user just generating hash with md5 using value only');
if($hash_input !== $hash_check){
//looks like the user manipulated staffid value, throw a validation error
}

【讨论】:

    【解决方案3】:

    您可以通过右键单击来阻止检查。

    这样防止右键点击

    document.addEventListener('contextmenu', function(e) {
      e.preventDefault();
    });
    

    如果用户按 F12 并单击箭头按钮并检查,它仍然可以。 您也可以通过此代码阻止 F12

     document.onkeydown = function(e) {
          if(event.keyCode == 123) { //F12 keycode is 123
             return false;
          }
        }
    

    【讨论】:

    • 开发工具的其他快捷方式呢?还是通过浏览器的菜单?不可能100%预防。开发人员不能将此作为安全措施。
    【解决方案4】:

    实际上,您不能限制用户检查任何特定元素的检查元素,但您可以完全禁用。检查下面的代码,它不允许用户打开调试器,甚至不允许打开页面源代码。

    document.onkeydown = function(e) {
      if(e.keyCode == 123) {
          e.preventDefault();
         return false;
      }
      if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
          e.preventDefault();
         return false;
      }
      if(e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
          e.preventDefault();
         return false;
      }
      if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
          e.preventDefault();
         return false;
      }
      if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
          e.preventDefault();
         return false;
      }
    }
    

    但是这段代码也有一些缺失。希望对你有帮助。

    【讨论】:

      【解决方案5】:

      试试这个,

      <input type="text" oncontextmenu="return false;" class="empl_date form-control" id="staffid" name="staffid" value="<?php echo $employeeworks[0]['employeeCode'];?>" arsley-maxlength="6" placeholder=" Schedule Date"  disabled />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-10
        • 2013-02-15
        • 2013-06-06
        • 2015-10-25
        • 1970-01-01
        • 2015-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多