Как поместить атрибут кодирования в xml другой это utf-16 с XmlWriter?

Существует множество способов предотвращения SQL-инъекций и других SQL-хаков. Вы можете легко найти его в Интернете (Google Search). Конечно, PDO - одно из хороших решений. Но я хотел бы предложить вам некоторые хорошие ссылки с помощью SQL Injection.

Что такое SQL-инъекция и как предотвратить

Руководство PHP для SQL-инъекция

Microsoft объяснение SQL-инъекции и предотвращения в PHP

и некоторые другие, подобные Предотвращение SQL-инъекций с MySQL и PHP

Теперь, почему вам нужно предотвратить запрос из SQL-инъекции?

Я хотел бы сообщить вам: почему мы пытаемся предотвратить SQL-инъекцию с помощью Ниже приведен короткий пример:

Запрос для проверки подлинности входа:

$query="select * from users where email='".$_POST['email']."' and password='".$_POST['password']."' ";

Теперь, если кто-то (хакер) помещает

$_POST['email']= admin@emali.com' OR '1=1

и пароль что-либо ....

Запрос будет анализироваться в системе только до:

$query="select * from users where email='admin@emali.com' OR '1=1';

Другая часть будет отброшена. Итак, что будет? Неавторизованный пользователь (хакер) сможет войти в систему как администратор без своего пароля. Теперь он может делать все, что может сделать администратор / адрес электронной почты. См., Очень опасно, если SQL-инъекция не предотвращается.

38
задан poke 31 July 2015 в 08:56
поделиться

2 ответа

Необходимо использовать StringWriter с соответствующим кодированием. К сожалению, StringWriter не позволяет Вам определить кодирование непосредственно, таким образом, Вам нужен класс как это:

public sealed class StringWriterWithEncoding : StringWriter
{
    private readonly Encoding encoding;

    public StringWriterWithEncoding (Encoding encoding)
    {
        this.encoding = encoding;
    }

    public override Encoding Encoding
    {
        get { return encoding; }
    }
}

( Этот вопрос подобен, но не совсем дубликат.)

РЕДАКТИРОВАНИЕ: ответить на комментарий: передайте StringWriterWithEncoding XmlWriter. Создайте вместо StringBuilder, затем назовите ToString () на нем в конце.

75
ответ дан Community 27 November 2019 в 03:21
поделиться

Я на самом деле решил проблему с MemoryStream:

public static string CreateOutputXmlString(ICollection<Field> fields)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.Encoding = Encoding.GetEncoding("windows-1250");

            MemoryStream memStream = new MemoryStream();
            XmlWriter writer = XmlWriter.Create(memStream, settings);

            writer.WriteStartDocument();
            writer.WriteStartElement("data");
            foreach (Field field in fields)
            {
                writer.WriteStartElement("item");
                writer.WriteAttributeString("name", field.Id);
                writer.WriteAttributeString("value", field.Value);
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.Flush();
            writer.Close();

            writer.Flush();
            writer.Close();

            string xml = Encoding.GetEncoding("windows-1250").GetString(memStream.ToArray());

            memStream.Close();
            memStream.Dispose();

            return xml;
        }
3
ответ дан agnieszka 27 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

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