Просто хочу сказать за все мои предыдущие вопросы, спасибо за помощь в решении нескольких вопросов. Конечно, я нуб, но обучение — это ключ.
Я делаю функцию, которая очищает входные данные перед отправкой в запрос, чтобы убедиться, что они безопасны. Это несколько вопросов из моей последней ветки, а также несколько новых вопросов. Этот вопрос адресован людям, которые действительно хороши в том, чтобы обеспечить безопасность и безопасность материалов.
Вот как я делаю все мои запросы.
$query = $dbh->prepare("SELECT * FROM table WHERE data = ?");
$query ->execute(array($data));
И в основном «вставка» запросов или любой другой тип запроса я делаю это так.
$query = $dbh->prepare("INSERT INTO table ( data ) VALUES ( :data )";
$query ->execute(array(':data'=>$data));
Я обычно использую этот метод для запросов, которые требуют ввода тонны данных. Мой вопрос, работает ли в любом случае? У меня нет ничего связанного, потому что у меня есть эта функция очистки, которую я сделал.
function sanitize($type, $input) {
if ($type == "email") { $input = filter_var($input, FILTER_SANITIZE_EMAIL); }
if ($type == "int") { $input = filter_var($input, FILTER_SANITIZE_NUMBER_INT); }
if ($type == "float") { $input = filter_var($input, FILTER_SANITIZE_NUMBER_FLOAT); }
if ($type == "string") {
$input = filter_var($input, FILTER_SANITIZE_STRING);
//$input = filter_var($input, FILTER_SANITIZE_ENCODED);
$input = filter_var($input, FILTER_SANITIZE_MAGIC_QUOTES);
$input = filter_var($input, FILTER_SANITIZE_SPECIAL_CHARS);
$input = filter_var($input, FILTER_SANITIZE_STRIPPED);
//$input = filter_var($input, FILTER_SANITIZE_URL);
}
return $input;
}
У меня вопрос, это лучший способ использования этой функции очистки? Есть ли лучший способ сделать это? Как я уже сказал, безопасность — это моя самая большая забота при создании проектов, и я не хочу рисковать, чтобы случилось что-то плохое, поэтому я бы предпочел оптимизировать безопасность, прежде чем перейти к проектам, которые я делаю.
И последний вопрос: как лучше всего использовать токены CSRF? Я попробовал скрипт из OWASP, но некоторые из моих друзей утверждали, что у него есть несколько уязвимостей, поэтому я не хочу его использовать. Еще раз спасибо 🙂
У меня вопрос, это лучший способ использования этой функции очистки?
Это хороший способ провести санитарную обработку. Все методы дезинфекции со временем улучшатся.
Есть ли лучший способ сделать это?
Если это веб-приложение, которое предоставляет вам пользовательский ввод, вы, возможно, захотите направить пользователя в интерфейсе с вашими ожиданиями (например, (введите номер квартиры, если применимо. В противном случае оставьте это поле пустым)).
JavaScript может использоваться для обеспечения определенного поведения.
Когда данные поступают в ваш PHP-скрипт, после процесса очистки также анализируется, находятся ли данные между X и Y длиной. Например, если клиент вводит возраст, убедитесь, что возраст находится в допустимых пределах.
Если это строка, и вы предпочитаете не иметь оскорбительных тегов, используйте strip_tags
удалить их. Выполните кодирование / декодирование / экранирование определенных символов — подумайте об использовании mysqli_real_escape_string
, htmlspecialchars
,
Кроме того, если в одном кадре выполняется несколько операторов вставки, используйте хранимые процедуры. Используйте транзакции, независимо от процедур. Откат, если все транзакции не завершены, как вы хотите.
Вместо того, чтобы использовать select * from ...
выберите необходимые столбцы. Вполне возможно, что некоторые результаты, где требуется всего 2-3 столбца, могут значительно ускориться, если имеется индекс покрытия.
Если ваше приложение использует system
, exec
и т. д., используя escapeshellargs
/escapeshellcmd
будет полезно.
При отображении информации в пользовательском интерфейсе убедитесь, что соответствующие поля отображаются с htmlspecialchars
чтобы уменьшить / исключить шансы XSS. Также подумайте об использовании urlencode
/json_encode
как необходимо.
Взгляни на http://www.wikihow.com/Prevent-Cross-Site-Request-Forgery-%28CSRF%29-Attacks-in-PHP это демонстрирует, с примерами, способы предотвращения CSRF-атак.
Комментарии к вашим вопросам — все это хорошие мысли, которые вы должны учитывать, и, что важно, — вы уже сделали шаг в правильном направлении — так хорошо для вас!
Других решений пока нет …