Я использую три разных способа предотвращения уязвимости моего веб-приложения для SQL-инъекции.
mysql_real_escape_string()
, которое является предопределенной функцией в PHP , и этот код добавляет обратную косую черту к следующим символам: \x00
, \n
, \r
, \
, '
, "
и \x1a
. Передайте входные значения в качестве параметров, чтобы свести к минимуму вероятность внедрения SQL. Надеюсь, это поможет вам.
Рассмотрим следующий запрос:
$iId = mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string () здесь не защитит. Если вы используете одиночные кавычки ('') вокруг ваших переменных внутри вашего запроса, это то, что защищает вас от этого. Ниже приведено ниже решение:
$iId = (int) mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
В этом вопросе есть хорошие ответы.
Я предлагаю , наилучшим вариантом является использование PDO.
Изменить:
mysql_real_escape_string()
устарел с PHP 5.5.0. Используйте либо mysqli, либо PDO.
Альтернативой mysql_real_escape_string () является
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
Пример:
$iId = $mysqli->real_escape_string("1 OR 1=1");
$mysqli->query("SELECT * FROM table WHERE id = $iId");
Для ПОЛУЧАЮТ параметры, можно захватить их от document.location.search
:
var $_GET = {};
document.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () {
function decode(s) {
return decodeURIComponent(s.split("+").join(" "));
}
$_GET[decode(arguments[1])] = decode(arguments[2]);
});
document.write($_GET["test"]);
Для параметров POST можно сериализировать $_POST
объект в формате JSON в a <script>
тег:
<script type="text/javascript">
var $_POST = <?php echo json_encode($_POST); ?>;
document.write($_POST["test"]);
</script>
В то время как Вы в нем (выполнение вещей на стороне сервера), Вы могли бы собрать ПОЛУЧИТЬ параметры на PHP также:
var $_GET = <?php echo json_encode($_GET); ?>;
Примечание: Вам будет нужна версия 5 PHP или выше использовать встроенное json_encode
функция.
Обновление: вот более универсальная реализация:
function getQueryParams(qs) {
qs = qs.split("+").join(" ");
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])]
= decodeURIComponent(tokens[2]);
}
return params;
}
var $_GET = getQueryParams(document.location.search);
Существует плагин для jQuery для получения, ПОЛУЧАЮТ параметрические усилители, названные .getUrlParams
Для POST, единственное решение повторяет POST в переменную JavaScript, использующую PHP, как предложенный Moran.
Или можно использовать этот http://plugins.jquery.com/project/parseQuery , это меньше, чем большинство (уменьшил 449 байтов), возвращает объект, представляющий пары "имя-значение".
С любым языком серверной стороны необходимо будет испустить переменные POST в JavaScript.
.NET
var my_post_variable = '<%= Request("post_variable") %>';
Просто остерегаться пустых значений. Если переменная, которую Вы пытаетесь испустить, будет на самом деле пуста, Вы получите ошибку синтаксиса JavaScript. Если Вы знаете, что это - строка, необходимо обернуть его в кавычки. Если это - целое число, можно хотеть протестировать, чтобы видеть, существует ли это на самом деле прежде, чем записать строку в JavaScript.
Можно попробовать Объект Строки запроса плагин для jQuery.
Вот что-то для сбора весь эти GET
переменные в глобальном объекте, стандартная программа, оптимизированная за несколько лет. Начиная с повышения jQuery теперь кажется уместным сохранить их в самом jQuery, согласовываю с John на потенциальной базовой реализации.
jQuery.extend({
'Q' : window.location.search.length <= 1 ? {}
: function(a){
var i = a.length,
r = /%25/g, // Ensure '%' is properly represented
h = {}; // (Safari auto-encodes '%', Firefox 1.5 does not)
while(i--) {
var p = a[i].split('=');
h[ p[0] ] = r.test( p[1] ) ? decodeURIComponent( p[1] ) : p[1];
}
return h;
}(window.location.search.substr(1).split('&'))
});
использование В качестве примера:
switch ($.Q.event) {
case 'new' :
// http://www.site.com/?event=new
$('#NewItemButton').trigger('click');
break;
default :
}
Hope это помогает.;)
Плагины jQuery кажутся хорошими, но мне нужна была быстрая js-функция для разбора параметров get. Вот что я нашел.