>  기사  >  백엔드 개발  >  웹 보안의 XML 인젝션 샘플 코드에 대한 자세한 소개

웹 보안의 XML 인젝션 샘플 코드에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-08 16:48:412259검색

XML 인젝션 공격은 SQL 인젝션과 동일한 원리로, 공격자는 악성코드를 입력하여 자신의 권한을 벗어난 기능을 수행합니다. XML은 데이터를 저장하는 방식으로, 데이터를 수정하거나 쿼리할 때 이스케이프하지 않고 직접 입력하거나 출력하면 XML 인젝션 취약점이 발생한다. 공격자는 XML 데이터 형식을 수정하고 새로운 XML 노드를 추가하여 데이터 처리 프로세스에 영향을 미칠 수 있습니다.

공격

다음은 등록된 사용자 정보를 XML 형식으로 저장하는 예이다.

final String GUESTROLE = "guest_role";
...
//userdata是准备保存的xml数据,接收了name和email两个用户提交来的数据。
String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                request.getParameter("name")+
                "</name><email>"+
                request.getParameter("email")+
                "</email></USER>";
//保存xml
userDao.save(userdata);

보시다시피 이 코드는 어떠한 필터링 작업도 수행하지 않는다. 일반 사용자가 등록하면 다음과 같은 데이터 레코드가 생성됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com
    </email>
</USER>

공격자가 자신의 이메일을 입력하면 다음 코드를 입력할 수 있습니다.

user1@a.com</email></USER><USER role="admin_role"><name>lf</name><email>user2@a.com

최종 사용자가 등록한 후, 데이터는 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<USER role="guest_role">
    <name>user1
    </name>
    <email>user1@a.com</email>
</USER>
<USER role="admin_role">
    <name>lf</name>
    <email>user2@a.com
    </email>
</USER>

보시다시피 role="admin_role"인 추가 관리자 lf가 있습니다. 공격 목적을 달성합니다.

방어

옛말처럼 공격이 있는 곳에 방어가 있다. 방어의 원칙은 실제로 매우 간단합니다. 키 문자열을 이스케이프하는 것입니다:

& --> &
 < --> <
 > --> >
 " --> "
 &#39; --> &#39;

XML을 저장하고 표시하기 전에 데이터 부분만 이스케이프합니다: ​​

String userdata = "<USER role="+
                GUESTROLE+
                "><name>"+
                StringUtil.xmlencode(request.getParameter("name"))+
                "</name><email>"+
                StringUtil.xmlencode(rrequest.getParameter("email"))+
                "</email></USER>";

이렇게 됩니다. .


위 내용은 웹 보안의 XML 인젝션 샘플 코드에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.