Из чего я должен выйти при отправке запроса?

Вот отрегулированная версия ответа Роба 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.

19
задан Mark Harrison 30 September 2016 в 04:32
поделиться

11 ответов

Для максимальной безопасности производительность и правильность используют подготовленные операторы. Вот то, как сделать это с большим количеством примеров на различных языках, включая PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

8
ответ дан 30 November 2019 в 05:17
поделиться

Я также вышел бы из комментариев (двойной тире)

--
2
ответ дан 30 November 2019 в 05:17
поделиться

Большая вещь использовать в PHP PDO. Это вынимает много догадок из контакта с обеспечением Вашего SQL (и весь Ваш материал SQL в целом). Это поддерживает подготовленные операторы, которые имеют большое значение для срыва Атак с использованием кода на SQL.

А большая краткая информация о PDO включена в книгу Антология PHP 101 Существенная Подсказка, Приемы & Взломы Davey Shafik и т.д. 2-й Ed. Делает изучение бриза и превосходен как ссылка. Я ни о чем не должен даже больше думать кроме фактического SQL-запроса.

1
ответ дан 30 November 2019 в 05:17
поделиться

Какой язык используют? Это походит в значительной степени, что у всех них есть встроенные функции Escape SQL, которые было бы лучше использовать.

, Например, PHP имеет mysql_real_escape_string и addslashes.

0
ответ дан 30 November 2019 в 05:17
поделиться

Вы - подготовленные операторы более обеспеченного использования с заполнителями. Вы используете PHP.NET... так или иначе, подготовленные операторы обеспечат больше безопасности, но я мог обеспечить образец.

0
ответ дан 30 November 2019 в 05:17
поделиться

В 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}';
    ";

Вот именно наслаждайтесь! (надеюсь, что сообщение правильно отправит символы нижнего подчеркивания и не &#95 ;)

0
ответ дан 30 November 2019 в 05:17
поделиться

Используйте Подготовленные / Параметризированные запросы!

0
ответ дан 30 November 2019 в 05:17
поделиться

Используйте подготовленные операторы.

0
ответ дан 30 November 2019 в 05:17
поделиться

Я не уверен, поддерживает ли MySql параметризированные запросы, если так, необходимо приложить усилие, чтобы пойти этим путем. Это гарантирует, что пользовательский вход не может сделать ничего злонамеренного.

Иначе некоторые "плохие" символы в дополнение к тому, что Вы упомянули, будут точкой с запятой (;) и комментарии (-и/* */).

-1
ответ дан 30 November 2019 в 05:17
поделиться

MySQL C API имеет свой собственный mysql_escape_string(). Используя его или он эквивалентен, было бы лучшим.

0
ответ дан 30 November 2019 в 05:17
поделиться

В запросе MySQL, при использовании КАК, также удостоверяются, что вышли "_" символы, поскольку его не оставляет mysql_real_escape_string.

Для ссылки, проверьте здесь

0
ответ дан 30 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: