禁止页面上所有文本区域的字符

Ban character from all textareas on the page

本文关键字:文本 区域 字符 禁止      更新时间:2023-09-26

我遇到了一个问题。只要我输入这个小f***r-->'<--在我通过AJAX发送到数据库的文本区域中,它停止了工作。例如,如果我输入:

我是个小侏儒,很高兴认识你。拥抱我!

数据库将只接收:

我是一个小侏儒,我

所以。。我可以将页面上的所有文本区域限制为喜欢A-Z+ÅåÖ+吗?,+其他经常使用的角色不会毁了我的东西?我将onchange用于AJAX请求,并使用keyup的另一个事件侦听器使其在Safari上工作,如果这对任何人来说都很重要的话!

SQL注入漏洞,明白了。我很害怕,有事情要做。感谢到目前为止所有的答案。

注意

我可以看到你开始了,这太棒了!你总是要找到一个bug来学习新东西,现在你正在学习SQL注入。如果我能提出一些建议,你最好从PHP开始。正确的方法,它会帮你一卡车。


您的PHP脚本(将这些数据插入数据库的)没有正确清理。

如果不看到您的关联代码,我们将无能为力。但我认为你在使用mysql_*/mysqli_*函数?我们将弃用前一个,并从PHP7起删除!

您应该开始学习以下两种准备好的语句类型之一:

  • PDO
  • Mysqli准备的报表

根据我的假设,您想要转义字符串:

$data = mysql_real_escape_string($_POST['data']);

尽管如此,仍然有办法绕过上述逃生途径;您的数据库仍然可以通过SQL注入进行黑客攻击,这不是您想要的。

正如Armadan所指出的,为了支持我上面的陈述,mysql_real_escape_string()在某些情况下仍然可以通过,请阅读以下内容:

  • 绕过mysql_real_eescape_string()的SQL注入
  • SQL注入攻击时绕过mysql_escape_string

根据您提供的代码,您将使用prepare()execute():

if(isset($_GET['comment1'])) {
    if($mysqli = connect_db()) {
        $insertcomment1 = $_GET['comment1'];
        $stmt = $mysqli->prepare("UPDATE result SET c1=?");
        if ( false===$stmt ) {
            die('prepare() failed: ' . htmlspecialchars($mysqli->error));
        }
        $stmt->bind_param('s', $insertcomment1);
        // execute
        if(!$stmt->execute()){
             die('execute() failed: ' . htmlspecialchars($mysqli->error));
        }
        // handle the rest here.
    }
}

你会做类似上面的事情。您最好阅读以下与使用MySQLi准备的语句相关的内容:

  • prepare()
  • bind_param()
  • execute()