全面保护用户干预输入

时间:2018-10-25 13:42:49

标签: php jquery sql

我是新来的。我已经知道这个问题将不太明确,但我似乎无法在谷歌搜索中找到好的结果。如果事实证明已经问过这个问题,请直接链接到我。

我有一个搜索功能,我试图保护它不受任何干扰(SQL注入/ XXS等)。

我的搜索功能执行以下操作:

按下“搜索”按钮后,它会删除引号和撇号:

$(document).on('click', '#event-search-button', function(event){

    search     = ($(".search-events").val()).replace(/([\"\'])/g,'\\'); 
    from_date  = $("#date-from").val().replace(/([\"\'])/g,'\\');
    to_date    = $("#date-to").val().replace(/([\"\'])/g,'\\');
    event_type = $("#typfilter").val().replace(/([\"\'])/g,'\\');

然后,我使用AJAX将数据发送到php文件,并在上述文件中将htmlspecialchars()包裹在变量周围:

$search    = htmlspecialchars($_POST['search']); 
$from_date = htmlspecialchars($_POST['from_date']);
$to_date = htmlspecialchars($_POST['to_date']);
$event_type = htmlspecialchars($_POST['event_type']);

现在,我认为我不应该受到大多数干预,但是事实证明,用户仍然可以做至少1件事(可能更多),以使我的SQL混乱。

如果用户输入%,他将获得所有结果的列表。虽然无害,但仍然很烦人。

在这种情况下,是否有插件或其他可以充当“万能”的工具并删除了所有可能造成损坏的字符?我知道PDO,但是我可以深入了解这个项目以重新完善我的所有查询。

1 个答案:

答案 0 :(得分:0)

您不需要PDO,但是如果要保护SQL查询免于注入,则需要使用准备好的语句和绑定参数。

看看这些链接: https://www.w3schools.com/php/php_mysql_prepared_statements.asp http://php.net/manual/en/mysqli-stmt.bind-param.php Advantages of using prepared statements over normal mysqli statements?