** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки 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, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.
Это больше не проблема, так как я в состоянии использовать расширения LINQ, в соответствии с файлами ReSharper DLL, даже при предназначении для.NET 3.0.
г-н Skeet был прав снова! Я в состоянии использовать полный синтаксис LINQ, будучи нацелен на.NET 3.0 в свойствах проекта и не сославшись на Систему. Ядро!
Это - вероятно, один из тех редких случаев, где имеет смысл использовать псевдоним экстерна .
На странице свойств для ссылки на Систему. Ядро (т.е. под Ссылками, выберите Систему. Ядро, щелкните правой кнопкой и выберите "Свойства"), измените значение "Псевдонимов" на "глобальный, SystemCore" (или просто "SystemCore", если это - пробел для запуска с).
Тогда в Вашем коде, запишите:
extern alias SystemCore;
using SystemCore::System.Linq;
, Который сделает все соответствующие типы и т.д. в Системе System.Core.dll. Доступное пространство имен Linq. Имя "SystemCore" здесь произвольно - Вы могли назвать его "DotNet" или чем-то еще, если это сделает его более ясным для Вас.
Это не действительно ответ, но может обеспечить более легкий способ для других воспроизвести проблему (от командной строки - Вы могли сделать это с двумя проектами в Visual Studio, если Вы хотите).
1) Создают BadLinq.cs и создают его как BadLinq.dll:
using System.Collections.Generic;
namespace System.Linq
{
public static class Enumerable
{
public static IEnumerable<T> Where<T>(this IEnumerable<T> source,
Func<T,bool> predicate)
{
return null;
}
}
}
2) Создают Test.cs:
extern alias SystemCore;
using System;
using SystemCore::System.Linq;
static class Test
{
static void Main()
{
var names = new[] { "Larry", "Curly", "Moe" };
var result = names.Where(x => x.Length > 1);
}
}
3) Компиляция Test.cs определение псевдонима экстерна:
csc Test.cs /r:BadLinq.dll /r:SystemCore=System.Core.dll
Это перестало работать с:
Test.cs (11,28): ошибка CS1061: 'Система. Массив' не содержит определение для 'Где' и никакой дополнительный метод 'Где', принимая первый аргумент типа 'Система. Массив' мог быть найден (Вы пропускаете директиву использования или ссылку на сборку?)
, Если Вы изменяете его, чтобы не попытаться использовать дополнительный метод (т.е. Счетный. Где), это хорошо работает с псевдонимом экстерна.
я думаю, что это может быть ошибкой компилятора. Я послал по электронной почте частный список рассылки, который читает команда C# - я обновлю этот ответ или добавлю новый, когда я получу ответ.
Одно решение состояло бы в том, чтобы выгнать весь Ваш код с квартиры к частичному классу, который использует код ReSharper. Там, Вы импортировали бы только пространство имен ReSharper и не Систему. Ядро.
В остальной части частичного класса, Вы импортировали бы все другие пространства имен, в которых Вы нуждаетесь, включая Систему. Ядро, но не пространство имен ReSharper.
Попробуйте использовать Pthreads, если вы хотите создать поток внутри процесса для одновременного программирования. Функция, которую вы хотите, это pthread_create и pthread_join для приводства позже.
Что-то вроде этого:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
#include <malloc.h>
int i = 0;
void *threadFunc(void *arg)
{
printf("%d\n",i);
}
int main()
{
int j = 0;
int returnValue = 0;
pthread_t* myThread = (pthread_t*) calloc(3, sizeof(pthread_t));;
while(i < 3)
{
returnValue = pthread_create(&myThread[i], NULL, threadFunc, NULL);
printf("main thread: %d\n",i);
i++;
}
for(j = 0; j < 3; j++)
{
pthread_join(myThread[j], NULL);
}
return 0;
}
Но, возможно, нет, в зависимости от ваших реальных потребностей.
-121--3428871-У меня была такая же проблема, даже с псевдонимами Extern, а I поднял его как ошибка компилятора . Обходной путь в настоящее время - отказаться от синтаксиса метода расширения.
Ошибка исправлена для Visual Studio 2010.