정규표현식으로 태그 내에 있는 onclick, onmouseout 등을 찾아서 지워주는 걸 좀 알려주세요 ㅠ.ㅠ

kor2u의 이미지

안녕하세요.

지금 xss에 대한 처리를 하고 있는데요.
태그 내에 들어가는 onclick, onload, onmouseover, onmouseout 등을 정규식으로 찾아서 replace하려고 하는데 잘 안돼서요 ㅠ.ㅠ

좀 도와주세요.

그리고 on으로 시작하는 이벤트들도 같이 처리할 수 있도록 좀 부탁드립니다. (--)(__) 꾸벅

jick의 이미지

제대로 된 HTML 파싱 라이브러리를 찾아서 쓰시는 걸 강력히 추천드립니다.

Prentice의 이미지

비슷한 일을 하려고 정규식을 좀 더 공부했던 적이 있었습니다. 그때 제일 실력이 많이 늘었던 것 같네요. 경험담을 말씀드리자면...

  • onclick=".*" 이런 것은 안 통합니다.
    • onclick="blah" class="foo" 이런 식으로 불필요한 것까지 다 검색에 걸리니까요.
  • onclick="[^"]*" 이런 식으로 닫는 따옴표를 제거하고 찾는다거나
    • onclick="([^"]*)" 이런 식으로 괄호 안을 캡쳐하고 인용한다거나 했었는데요...

나중에 알고 보니 저렇게 골치 아프게 하느니 XSLT를 써서 변환하는 게 훨씬 쉽고 깔끔했을 것 같습니다. jick 님 말씀대로 HTML 파싱이 답입니다.

kor2u의 이미지

감사드립니다. HTML 파싱이 답이군요 :)