Это просто превентивная мера. Любое приложение может быть потенциально уязвимо для любого возможного эксплойта при неправильном кодировании. Хитрость в уменьшении возможного ущерба заключается в выполнении действий с наименьшими необходимыми привилегиями. Отказ от запуска от имени root, когда это не требуется, - отличное начало.
При изменении XML-файлов sed
действительно не лучший выбор, так как он не знает, что редактируемый файл имеет структуру, и с радостью превратит хорошо -сформированный документ в плохо -сформированную кашу.. Вместо этого вам следует использовать инструмент, поддерживающий XML -:. Я буду использовать xsltproc
и XSLT, но утилита XML grep, скорее всего, тоже справится с этой задачей.
Во-первых, создайте таблицу стилей преобразования идентичности , которая заменяет старое значение атрибута select
новым:
replace.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/TR/xhtml1/strict">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@select[contains(.,'/ns1:Invoice/cac:AccountingSupplierParty/cbc:CustomerAssignedAccountID')]">
<xsl:attribute name="select">
<xsl:value-of select="'/ns1:Invoice/cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID'"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Затем запустите xsltproc
файл, который нужно преобразовать:
xsltproc replace.xslt /path/to/inputfile.xml > /path/to/convertedfile.xml
Как обычно, подтвердите правильность преобразования; Я отказался от того, что вы предоставили, поэтому для полного преобразования могут потребоваться другие изменения.