我是新来的。我已经知道这个问题将不太明确,但我似乎无法在谷歌搜索中找到好的结果。如果事实证明已经问过这个问题,请直接链接到我。
我有一个搜索功能,我试图保护它不受任何干扰(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,但是我可以深入了解这个项目以重新完善我的所有查询。
答案 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?