Могу ли я предотвратить обработку XML-данных с помощью SQL-сервера - PHP

При сохранении данных из XML-файла в базу данных MSSQL база данных использует информацию из XML-файла и пытается ее обработать. Это приводит к ошибкам при выполнении запроса. В данных действительно есть некоторые странные токены и последовательности, поэтому я считаю, что проблема.

Есть ли способ поместить данные в базу данных в виде открытого текста?

Ниже вы можете найти файл XML.

<?xml version = "1.0"?><OWASPZAPReport version = "2.7.0" generated = "Then">
<site name = "xnxx" host = "xnxx" port = "80" ssl = "false">
    <alerts>
        <alertitem>
            <pluginid>10020</pluginid>
            <alert>X-Frame-Options Header Not Set</alert>
            <name>X-Frame-Options Header Not Set</name>
            <riskcode>2</riskcode>
            <confidence>2</confidence>
            <riskdesc>Medium (Medium)</riskdesc>
            <desc>&lt;p&gt;X-Frame-Options header is not included in the HTTP response to protect against &apos;ClickJacking&apos; attacks.&lt;/p&gt;</desc>
            <instances>
                <instance>
                <uri>xnxx/uri>
                <method>GET</method>
                <param>X-Frame-Options</param>
                </instance>
                <instance>
                <uri>xnxx</uri>
                <method>GET</method>
                <param>X-Frame-Options</param>
                </instance>
            </instances>
            <count>97</count>
            <solution>&lt;p&gt;Most modern Web browsers support the X-Frame-Options HTTP header. Ensure it&apos;s set on all web pages returned by your site (if you expect the page to be framed only by pages on your server (e.g. it&apos;s part of a FRAMESET) then you&apos;ll want to use SAMEORIGIN, otherwise if you never expect the page to be framed, you should use DENY. ALLOW-FROM allows specific websites to frame the web page in supported web browsers).&lt;/p&gt;</solution>
            <reference>&lt;p&gt;http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx&lt;/p&gt;</reference>
            <cweid>16</cweid>
            <wascid>15</wascid>
            <sourceid>3</sourceid>
        </alertitem>
    </alerts>
</site>

А это php-файл. Если вы обнаружите какие-либо другие ошибки или плохие методы, не стесняйтесь указать на них, я новичок в PHP и SQL-сервере.

Первый цикл foreach перебирает теги alertitem (их больше, но я сократил файл). Второй цикл перебирает экземпляры.

<?php

$xml=simplexml_load_file("XML-FILE");

$serverName = "";

$connectionInfo = array( "Database"=>"DB");
$conn = sqlsrv_connect($serverName,$connectionInfo) or die('Error connecting to the   SQL Server database.');

if ( $conn === false ) {
     die( print_r( sqlsrv_errors(), true));
}


$query = "INSERT INTO Scan(ScanType, start_date, end_date, TargetTargetID) VALUES   
('$ScanType', '$start_date', '$end_date', '$TargetTargetID');";

$query_id = "SELECT SCOPE_IDENTITY() as id;";

$result = sqlsrv_query($conn,$query);
$result_id = sqlsrv_query($conn,$query_id);

if ( $result === false ) {
     die( print_r( sqlsrv_errors(), true));
}


if ( sqlsrv_fetch( $result_id ) === false) {
     die( print_r( sqlsrv_errors(), true));
}

$ScanID = sqlsrv_get_field( $result_id, 0);



//iterating the alertitems
foreach ($xml ->site->alerts->alertitem as $row) {
    $issueName = $row->name;
    $issueDescription = $row->desc;
    $issueSeverity = $row->riskdesc;
    $issueConfidence = $row->confidence;
    $count = $row->count;
    $issueRemedy_guidance = $row->solution;
    $cweid = $row->cweid;
    $wascid = $row->wascid;

    //SQL query
    $query = "INSERT INTO issueZAP(issueName, issueDescription, issueSeverity, issueConfidence, count, issueRemedy_guidance, cweid, wascid, ScanID) VALUES   
('$issueName', '$issueDescription', '$issueSeverity', '$issueConfidence', '$count', '$issueRemedy_guidance', '$cweid', '$wascid', '$ScanID');";
    $query_issue_id = "SELECT SCOPE_IDENTITY() as id;";
    $result = sqlsrv_query($conn,$query);

    if ( $result === false ) {
        die( print_r( sqlsrv_errors(), true));
    }

    //get ID of newly made issue
    $result_issue_id = sqlsrv_query($conn,$query_issue_id);
    if ( sqlsrv_fetch( $result_issue_id ) === false) {
         die( print_r( sqlsrv_errors(), true));
    }
    $issueID = sqlsrv_get_field( $result_issue_id, 0);
    echo $issueID."\n";

    //iterating instances
    foreach ($row ->instances->instance as $insta) {
        $uri=$insta->uri;
        $method=$insta->method;
        $evidence=$insta->evidence;
        $attack=$insta->attack;
        $param=$insta->param;

        //SQL query
        $query = "INSERT INTO instances(uri, method, evidence, attack, param, issueID) VALUES   
('$uri', '$method', '$evidence', '$attack', '$param', '$issueID');";
        $result = sqlsrv_query($conn,$query);
        if ( $result === false ) {
            die( print_r( sqlsrv_errors(), true));
        }
    }
}
?>

Это ошибки, которые я получаю при запуске PHP-файла. Когда я не помещаю оператор die () -, он помещает некоторые элементы предупреждения в базу данных без каких-либо проблем.

&apos;

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

Array
(
    [0] => Array
        (
            [0] => 08004
            [SQLSTATE] => 08004
            [1] => 911
            [code] => 911
            [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Database 'SAMEORIGIN' does not exist. Make sure that the name is entered correctly.
            [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Database 'SAMEORIGIN' does not exist. Make sure that the name is entered correctly.
        )

    [1] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 102
            [code] => 102
            [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near 'ClickJacking'.
            [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Incorrect syntax near 'ClickJacking'.
        )

    [2] => Array
        (
            [0] => 42000
            [SQLSTATE] => 42000
            [1] => 4145
            [code] => 4145
            [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]An expression of non-boolean type specified in a context where a condition is expected, near 'expect'.
            [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]An expression of non-boolean type specified in a context where a condition is expected, near 'expect'.
        )

)
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
182
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда php читал XML-файл, он уже преобразовал "& apos;" в одинарные кавычки, а MSSQL не принимает одинарные кавычки.

Поэтому я заменил одинарные кавычки двойными одинарными кавычками, и теперь он работает.

Другие вопросы по теме