使用 Jquery - SQL 注入选择 SQL 表列


Selecting SQL table column with Jquery - SQL injection?

我正在寻找一些关于哪种方法更安全、更有效的建议。

选项 A:我有一个名为日历的数据库,其中有 12 个表 - "一月"、"二月"等。每个月都有自己的.php页面,上面有"从一月中选择*"等。我有一个下拉菜单,当用户选择例如"一月"时,我有一个 ajax 脚本,然后将 jan.php 加载到div "当前月份"

我想做什么,因为除了"当前月份"div 之外,我还有一个"最近添加"的div,显示按时间戳排序的最后 3 个条目。我不确定如何显示整个数据库中最近添加的 3 个条目,所以我尝试了选项 B。

选项 B:我有一个名为日历的表,每行都有一个名为月的列。这使得显示最近添加的内容变得更加简单,但我不确定如何实现下拉菜单。从我所读到的内容来看,我的想法可以让我对SQL注入持开放态度。

这个想法是这样的:我有一个名为"selectedmonth"的jquery变量,它等于所选月份的值。然后我想采用该变量... 例如,用户选择"一月"的值是"jan",我希望sql语句然后使用SELECT * FROM 日历更新,其中月份="jan",但正如我所说,我听说这可能会让我对SQL注入敞开大门。

无论如何都可以动态更新SQL语句,也许使用AJAX或JSON?有没有办法在不让自己接受SQL注入的情况下做选项B?或者有没有更简单的方法让我使用 OPTION A,并能够在整个数据库中找到最近添加的 3 行?

我想知道的一件事是选项 A,我显然会有 12 个"月".php的文件,这会增加很多页面加载时间吗?

任何建议将不胜感激。

使用预准备语句,你应该没问题。第二种选择更可取,第一种不是好主意......

您所要做的就是:

$row = $conn->prepare("SELECT * FROM calendar WHERE months = ?");
$row->bind_param('s', $_GET['month']);
$row->execute();
$row = $row->get_result();

而且您将无需SQL注入。在此处阅读更多内容。