:)
Я работаю над веб-сайтом со списком серверов, но у меня проблема с безопасностью из-за панели поиска. Я хотел бы разрешить пользователям искать серверы с моего веб-сайта, поэтому я сделал панель поиска. Но при поиске серверы отображаются системой пагинации, которая работает с аффиксом. Некоторые значения влияют на команду MySQL для выполнения разбивки на страницы. Поэтому я не могу использовать prepare, а затем bind_param, потому что какой-то параметр содержит WHERE и т. д. Но
Чтобы быть более полным, я покажу вам код:
if (isset($_GET['searchserver'])){
$searchserver = $_GET['searchserver'];
$truevalue = '%' . $searchserver . '%';
$this->where = "WHERE `name` LIKE '{$truevalue}' ";
}
Итак, это работает, но я хочу проверить переменную $searchserver, прежде чем добавлять ее в свой $this->where. Я хотел бы знать, могу ли я проверить его, и не содержит ли он чего-то другого, кроме имени сервера. (Имя сервера может содержать цифры и буквы, но не странные символы, такие как ; : , .) Является ли это возможным ? Я не могу использовать параметр привязки..
Спасибо за ваше время и извините за мой плохой английский!
Она устроена так: $stmt = $database->prepare("SELECT COUNT(*) FROM servers {$where}"); $stmt->выполнить(); $stmt->bind_result($total_servers); $stmt->fetch(); $stmt->закрыть();
Но к нему добавлены некоторые переменные, например: $this->limit = "LIMIT" . ($this->current_page - 1) * $this->per_page . "," . $это->за_страницу; Таким образом, любой, кто использует панель поиска, может ввести код MySQL.






Несмотря на то, что не имеет смысла, почему вы не используете pdo,
вы можете добавить кучу фильтров здравомыслия на вход
Какой API? Если он не предоставляет подготовленные операторы, отмените его. Кроме того, покажите, как вы строите запрос, нет причин использовать
$this->where = "WHERE name LIKE '{$truevalue}' ";.