Вот отрегулированная версия ответа Роба 2016, в том числе Microsoft Edge и обнаружение Blink:
( edit : я обновил ответ Роба выше с этой информацией.)
// Opera 8.0+ (UA detection to detect Blink/v8-powered Opera)
isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
// Firefox 1.0+
isFirefox = typeof InstallTrigger !== 'undefined';
// Safari 3.0+
isSafari = /constructor/i.test(window.HTMLElement) || (function (p) { return p.toString() === "[object SafariRemoteNotification]"; })(!window['safari'] || safari.pushNotification);
// Internet Explorer 6-11
isIE = /*@cc_on!@*/false || !!document.documentMode;
// Edge 20+
isEdge = !isIE && !!window.StyleMedia;
// Chrome 1+
isChrome = !!window.chrome && !!window.chrome.webstore;
// Blink engine detection
isBlink = (isChrome || isOpera) && !!window.CSS;
/* Results: */
console.log("isOpera", isOpera);
console.log("isFirefox", isFirefox);
console.log("isSafari", isSafari);
console.log("isIE", isIE);
console.log("isEdge", isEdge);
console.log("isChrome", isChrome);
console.log("isBlink", isBlink);
. Красота такого подхода заключается в том, что он зависит от свойств браузера, поэтому он охватывает даже производные браузеры, такие как Yandex или Vivaldi, которые практически совместимый с основными браузерами, чьи двигатели они используют. Исключение составляет Opera, которая полагается на обнюхивание пользовательского агента, но сегодня (т. Е. Версия 15 и выше) даже Opera сама по себе является оболочкой для Blink.
Для максимальной безопасности производительность и правильность используют подготовленные операторы. Вот то, как сделать это с большим количеством примеров на различных языках, включая PHP:
https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks
Большая вещь использовать в PHP PDO. Это вынимает много догадок из контакта с обеспечением Вашего SQL (и весь Ваш материал SQL в целом). Это поддерживает подготовленные операторы, которые имеют большое значение для срыва Атак с использованием кода на SQL.
А большая краткая информация о PDO включена в книгу Антология PHP 101 Существенная Подсказка, Приемы & Взломы Davey Shafik и т.д. 2-й Ed. Делает изучение бриза и превосходен как ссылка. Я ни о чем не должен даже больше думать кроме фактического SQL-запроса.
Какой язык используют? Это походит в значительной степени, что у всех них есть встроенные функции Escape SQL, которые было бы лучше использовать.
, Например, PHP имеет mysql_real_escape_string и addslashes.
Вы - подготовленные операторы более обеспеченного использования с заполнителями. Вы используете PHP.NET... так или иначе, подготовленные операторы обеспечат больше безопасности, но я мог обеспечить образец.
В PHP я использую этого, и я буду ценить каждый комментарий об этом:
function quote_smart($valeur)
{
if (get_magic_quotes_gpc())
$valeur = stripslashes($valeur);
if (!is_numeric($valeur))
$valeur = mysql_real_escape_string($valeur);
return $valeur;
}
$IdS = quote_smart($_POST['theID']);
$sql = "
SELECT * FROM Students
WHERE IdStudent={$IdS};
";
Нуждается в еще одной проверке, если поле может быть ПУСТЫМ:
$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';
if(is_null($picture))
$p = 'NULL';
else
$p = "'".quote_smart($picture)."'";
$IdS = quote_smart($theidyouwant);
$requete = "SELECT * FROM Students
WHERE IdStudent={$IdS} AND
PictureStudent={$p} AND
NameStudent='{$Name}';
";
Вот именно наслаждайтесь! (надеюсь, что сообщение правильно отправит символы нижнего подчеркивания и не _ ;)
Используйте Подготовленные / Параметризированные запросы!
Я не уверен, поддерживает ли MySql параметризированные запросы, если так, необходимо приложить усилие, чтобы пойти этим путем. Это гарантирует, что пользовательский вход не может сделать ничего злонамеренного.
Иначе некоторые "плохие" символы в дополнение к тому, что Вы упомянули, будут точкой с запятой (;) и комментарии (-и/* */).
MySQL C API имеет свой собственный mysql_escape_string()
. Используя его или он эквивалентен, было бы лучшим.
В запросе MySQL, при использовании КАК, также удостоверяются, что вышли "_" символы, поскольку его не оставляет mysql_real_escape_string.
Для ссылки, проверьте здесь