php - 文本区域中的 WordPress SQL 命令

标签 php mysql wordpress prepared-statement

假设我有一个表单,可以在帖子中生成以下内容:

$title = sanitize_text_field($_POST['title']);
$text = esc_textarea($_POST['$text']);

然后我使用准备语句将值插入数据库,但我有一个问题。我用这一行将值发送到数据库:

$wpdb->prepare("INSERT INTO $table_emails VALUES('', %s, %s)", $title, $text);

这是否安全,可以说可以防止人们插入诸如 SELECT * FROM table_name 之类的内容吗?

最佳答案

准备好的语句“注入(inject)”值并将您的查询包装在“标签”等内容中。我不是 MySQL 专家,因为现在我依赖查询构建器,但预准备语句的一般目的是避免注入(inject)。

上面应该输出类似

INSERT INTO `$table_emails` VALUES ('','title', 'text');

如果有人试图在上面注入(inject)一条语句,我很确定(大约 6 年没有使用过 wordpress)它会看起来像这样:

INSERT INTO `$table_emails` VALUES ('', '\';SELECT * FROM blah;\'', '');

请注意,注入(inject)现在只是一根绳子,我年轻的学徒。

但是,是的,准备好的声明是老板防止 bobby drop table 进入的方式。

关于php - 文本区域中的 WordPress SQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44324185/

相关文章:

wordpress - 谷歌广告加载缓慢

javascript - 插入/编辑链接模式文本字段无法聚焦 TinyMce Wordpress

php - 迁移的意外行为 :refresh command laravel

php - 将数组从 Flash 传递到 PHP

php - SQL 插入日期总是出现 NULL

php - 使用 PHP 制作点击计数器

mysql - 需要 count 返回 0 但没有空结果

PHP/MySQL - 将两个表组合成一个数组

PHP system() mysqldump 使我的页面没有响应

mysql - 如何对我在 Wordpress 数据库中创建的自定义表进行 SQL 注入(inject)证明调用?