Разрешение расширения methods/LINQ неоднозначность

** Предупреждение: подход, описанный в этом ответе, применим только к очень конкретным сценариям и не является безопасным, поскольку атаки 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, история , браузера или любой другой конфиденциальной информации, поэтому вы можете иметь дело с ними позже, запретив их учетную запись или контактные органы.

28
задан Peter Mortensen 20 July 2015 в 20:38
поделиться

5 ответов

Это больше не проблема, так как я в состоянии использовать расширения LINQ, в соответствии с файлами ReSharper DLL, даже при предназначении для.NET 3.0.

г-н Skeet был прав снова! Я в состоянии использовать полный синтаксис LINQ, будучи нацелен на.NET 3.0 в свойствах проекта и не сославшись на Систему. Ядро!

2
ответ дан Peter Mortensen 28 November 2019 в 03:10
поделиться

Это - вероятно, один из тех редких случаев, где имеет смысл использовать псевдоним экстерна .

На странице свойств для ссылки на Систему. Ядро (т.е. под Ссылками, выберите Систему. Ядро, щелкните правой кнопкой и выберите "Свойства"), измените значение "Псевдонимов" на "глобальный, SystemCore" (или просто "SystemCore", если это - пробел для запуска с).

Тогда в Вашем коде, запишите:

extern alias SystemCore;
using SystemCore::System.Linq;

, Который сделает все соответствующие типы и т.д. в Системе System.Core.dll. Доступное пространство имен Linq. Имя "SystemCore" здесь произвольно - Вы могли назвать его "DotNet" или чем-то еще, если это сделает его более ясным для Вас.

42
ответ дан Jon Skeet 28 November 2019 в 03:10
поделиться

Это не действительно ответ, но может обеспечить более легкий способ для других воспроизвести проблему (от командной строки - Вы могли сделать это с двумя проектами в 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# - я обновлю этот ответ или добавлю новый, когда я получу ответ.

6
ответ дан Jon Skeet 28 November 2019 в 03:10
поделиться

Одно решение состояло бы в том, чтобы выгнать весь Ваш код с квартиры к частичному классу, который использует код ReSharper. Там, Вы импортировали бы только пространство имен ReSharper и не Систему. Ядро.

В остальной части частичного класса, Вы импортировали бы все другие пространства имен, в которых Вы нуждаетесь, включая Систему. Ядро, но не пространство имен ReSharper.

0
ответ дан Peter Mortensen 28 November 2019 в 03:10
поделиться

Попробуйте использовать 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.

0
ответ дан 28 November 2019 в 03:10
поделиться