이 섹션에는 소스 코드 외부에 있지만 제작 중인 제품의 보안에는 여전히 중요한 내용이 모두 포함되어 있습니다. 이 섹션에서 다루는 문제들은 소스 코드와 직접적으로 관련이 없기 때문에 나머지 섹션과 분리했습니다.
<EncryptedParts>
태그에는 <sp:Attachments>
태그가 포함되지 않았기 때문에 SOAP 메시지 첨부 파일을 암호화할 필요가 없습니다.
<sp:EncryptedParts>
<sp:Body/>
</sp:EncryptedParts>
<EncryptedParts>
태그에는 <sp:Body>
태그가 포함되지 않았기 때문에 SOAP 메시지 본문을 암호화할 필요가 없습니다.
<sp:EncryptedParts>
<sp:Header .../>
</sp:EncryptedParts>
<EncryptedParts>
태그에는 <sp:Header>
태그가 포함되지 않았기 때문에 SOAP 메시지 헤더를 암호화할 필요가 없습니다.
<sp:EncryptedParts>
<sp:Body/>
</sp:EncryptedParts>
<sp:SymmetricBinding>
<wsp:Policy>
<sp:SignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:SignatureToken>
...
</wsp:Policy>
</sp:SymmetricBinding>
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:RecipientEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientEncryptionToken>
<sp:RecipientSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientSignatureToken>
...
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorEncryptionToken>
<sp:RecipientEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientEncryptionToken>
<sp:RecipientSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientSignatureToken>
...
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorEncryptionToken>
<sp:InitiatorSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:RecipientSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientSignatureToken>
...
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorEncryptionToken>
<sp:InitiatorSignatureToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:InitiatorSignatureToken>
<sp:RecipientEncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:RecipientEncryptionToken>
...
</wsp:Policy>
</sp:AsymmetricBinding>
<SignedParts>
태그에는 <sp:Attachments>
태그가 포함되지 않았기 때문에 SOAP 메시지 첨부 파일에 서명할 필요가 없습니다.
<sp:SignedParts>
<sp:Body/>
</sp:SignedParts>
<SignedParts>
태그에는 <sp:Body>
태그가 포함되지 않았기 때문에 SOAP 메시지 본문에 서명할 필요가 없습니다.
<sp:SignedParts>
<sp:Header .../>
</sp:SignedParts>
<SignedParts>
태그에는 <sp:Headery>
태그가 포함되지 않았기 때문에 SOAP 메시지 헤더에 서명할 필요가 없습니다.
<sp:SignedParts>
<sp:Body/>
</sp:SignedParts>
<sp:SymmetricBinding>
<wsp:Policy>
<sp:EncryptionToken>
<wsp:Policy>
...
</wsp:Policy>
</sp:EncryptionToken>
...
</wsp:Policy>
</sp:SymmetricBinding>
<IncludeTimestamp>
태그가 주석 처리되었습니다.
<sp:AsymmetricBinding>
<wsp:Policy>
...
<!--<sp:IncludeTimestamp/>-->
<sp:ProtectTokens/>
<sp:OnlySignEntireHeadersAndBody/>
</wsp:Policy>
</sp:AsymmetricBinding>
<ProtectTokens>
태그가 생략되었습니다.
<sp:AsymmetricBinding>
<wsp:Policy>
<sp:InitiatorToken>
...
</sp:InitiatorToken>
<sp:RecipientToken>
...
</sp:RecipientToken>
<sp:AlgorithmSuite>
...
</sp:AlgorithmSuite>
<sp:Layout>
...
</sp:Layout>
<sp:IncludeTimestamp/>
<sp:OnlySignEntireHeadersAndBody/>
</wsp:Policy>
</sp:AsymmetricBinding>
<sp:SupportingTokens>
<wsp:Policy>
<sp:UsernameToken
sp:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512/IncludeToken/AlwaysToRecipient">
<wsp:Policy>
<sp:WssUsernameToken11/>
</wsp:Policy>
</sp:UsernameToken>
</wsp:Policy>
</sp:SupportingTokens>
processContents
속성이 lax
또는 skip
으로 설정되면 와일드카드 요소 및 속성에 대해 입력 검증이 수행되지 않습니다.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="cart" >
<xs:complexType>
<xs:sequence>
<xs:element name="itemID" maxOccurs="1" />
<xs:any namespace="http://itemInfo" processContents="lax" minOccurs="1" maxOccurs="5"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0"?>
<xsd:schema targetNamespace="http://itemInfo" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="description" type="xsd:string"/>
</xsd:schema>
http://itemInfo
네임스페이스에서 임의의 태그가 검증되도록 허용하므로 다음 XML이 검증을 통과할 수 있습니다.
<?xml version=\"1.0\" ?>
<cart xmlns:itemInfo="http://itemInfo">
<itemID>123</itemID>
<itemInfo:name>Shoes</itemInfo:name>
<itemInfo:description>Black Shoes</itemInfo:description>
<itemInfo:price>1.00</itemInfo:price>
</cart>
itemInfo:price
태그가 포함되어 있습니다. 결과적으로, Shoes
에 대해 $1의 가격을 설정하도록 이 XML 문서의 고객을 속일 수 있습니다.<any>
요소를 사용하면 XML Injection과 같은 공격을 수행하기가 쉬워집니다.<any>
요소는 유효한 문서에 임의의 태그를 포함할 수 있음을 의미합니다. 임의의 콘텐트를 허용하면 공격자가 XML Injection과 같은 공격을 쉽게 수행할 수 있습니다.
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="cart" >
<xs:complexType>
<xs:sequence>
<xs:element name="itemID" maxOccurs="1" />
<xs:element name="price" maxOccurs="1" />
<xs:element name="description" maxOccurs="1"/>
<xs:any minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="description" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="code" type="xs:string"/>
</xs:schema>
<any>
요소를 사용하므로 다음 XML 문서가 유효한 것으로 간주됩니다.
<?xml version=\"1.0\" ?>
<cart>
<itemID>123</itemID>
<price>50.00</price>
<price>1.0</price>
</cart>
maxOccurs
값을 제한 없는 수로 설정하면 리소스가 고갈되고 궁극적으로 Denial of Service 공격이 발생할 수 있습니다.bar
요소를 허용하는 스키마의 예입니다.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name="foo" >
<xs:complexType>
<xs:sequence>
<xs:element name="bar" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<any>
요소에서 ##any
의 네임스페이스를 지정하면 스키마가 스키마에 명시적으로 정의된 것 이상의 요소를 허용하여 악성 문서를 더 쉽게 만들 수 있음을 의미합니다.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
<xs:element name='foo'>
<xs:complexType>
<xs:sequence>
<xs:any namespace='##any' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>