** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки SQL-инъекции не только полагаются на возможность вставлять X=Y
. **
Если злоумышленники пытаются взломать форму с помощью переменной PHP $_GET
или с помощью строки запроса URL, вы сможете поймать их, если они не защищены.
RewriteCond %{QUERY_STRING} ([0-9]+)=([0-9]+)
RewriteRule ^(.*) ^/track.php
Поскольку 1=1
, 2=2
, 1=2
, 2=1
, 1+1=2
и т. д. ... являются распространенными вопросами к базе данных SQL злоумышленника. Возможно, он также используется многими хакерскими приложениями.
Но вы должны быть осторожны, чтобы не переписывать безопасный запрос с вашего сайта. Вышеупомянутый код дает вам возможность переписать или перенаправить (зависит от вас) эту динамическую строку запроса, зависящую от хакерства, на страницу, в которой будет храниться IP-адрес злоумышленника или EVEN THEIR COOKIES, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.
Это не имеет regex наверху
double myNum = 0;
String testVar = "Not A Number";
if (Double.TryParse(testVar, out myNum)) {
// it is a number
} else {
// it is not a number
}
Кстати, все стандартные типы данных, за явным исключением GUID, поддерживает TryParse.
обновление
secretwep поднял это значение "2345", пройдет вышеупомянутый тест как число. Однако, если необходимо удостовериться, что все символы в строке являются цифрами, тогда другой подход должен быть проявлен.
пример 1 :
public Boolean IsNumber(String s) {
Boolean value = true;
foreach(Char c in s.ToCharArray()) {
value = value && Char.IsDigit(c);
}
return value;
}
или если Вы хотите быть немного более необычны
public Boolean IsNumber(String value) {
return value.All(Char.IsDigit);
}
Я предпочитаю что-то вроде этого, это позволяет Вам решить что NumberStyle
для тестирования на.
public static Boolean IsNumeric(String input, NumberStyles numberStyle) {
Double temp;
Boolean result = Double.TryParse(input, numberStyle, CultureInfo.CurrentCulture, out temp);
return result;
}
В дополнение к предыдущим корректным ответам, вероятно, стоит указать, что "Не Число" (NaN) в его общем использовании не эквивалентно строке, которая не может быть оценена как числовое значение. NaN обычно понимается, поскольку числовое значение раньше представляло результат "невозможного" вычисления - где результат не определен. В этом отношении я сказал бы, что использование JavaScript является немного вводящим в заблуждение. В C# NaN определяется как свойство единственных и двойных числовых типов и используется для обращения явно к результату погружающегося нуля нулем. Другие языки используют его для представления различных "невозможных" значений.
Да, IsNumeric является VB. Обычно люди используют TryParse () метод, хотя это немного неуклюже. Как Вы предположили, можно всегда писать собственное.
int i;
if (int.TryParse(string, out i))
{
}
VB имеет эти IsNumeric
функция. Вы могли сослаться Microsoft.VisualBasic.dll
и использовать его.
public static bool IsNumeric(string anyString)
{
if (anyString == null)
{
anyString = "";
}
if (anyString.Length > 0)
{
double dummyOut = new double();
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-US", true);
return Double.TryParse(anyString, System.Globalization.NumberStyles.Any, cultureInfo.NumberFormat, out dummyOut);
}
else
{
return false;
}
}
Возможно, это особенность C# 3, но вы могли бы использовать double.NaN
.