문제

XSS-SAFE 문자열 보간 체계의 개념 증명을 구성하려고합니다.

대체물이있는 문자열이 주어지면

"Hello <b>$planetoid</b>!"

나는 그것을 문자 그대로의 부분과 대체물로 나누고 싶다 ("Hello<b>" planetoid "</b>!") 그런 다음 문자 그대로의 주 머신을 왼쪽에서 오른쪽으로 실행하십시오. 보간 된 값에 도달하면 (planetoid 위에서)), 나는 주에서 적절한 탈출 기능으로 이동할 수 있어야합니다.

LEX/YACC/Bison을 사용하여 상태 머신을 도출하고 문법의 라벨을 출력 상태와 연결할 수있는 방법에 대한 예를 아는 사람이 있습니까? JavaScript에서 모두 사용할 수있는 상태 머신을 도출하고 PHP의 기본 문자열 구현을 시도하고 교체하려고합니다.

이 작업을 수행하는 이유가 설명되어 있습니다 여기.

건배, 마이크

도움이 되었습니까?

해결책

일반적으로 BNF로 표현할 수있는 문법의 상태 기계를 만들 수는 없습니다. 상태 기계는 일반 언어 만 인식 할 수 있으며 BNF는 컨텍스트없는 언어를 지정할 수 있습니다. YACC는 파서를 만들 수 있습니다. 충분할까요?

다른 팁

문법에 마커를 넣을 수있는 것처럼 보이므로 두 가지 다른 생산 유형을 사용하면 부작용이없고 캐릭터를 소비하는 문자를 소비하고 문자가 소비되지 않지만 상태 변수를 업데이트합니다.

ST_EXPECT_TAG_NAME : { state = TAG_NAME };
TAG_BODY
    : '<' ST_EXPECT_TAG_NAME TAG_NAME ATTRS SPACES '>' ST_OUT_OF_TAG
    ;

컴파일 된 출력은 스위치 문의 상태 이름을 연관시킵니다.

YY_REDUCE_PRINT (yyn);
switch (yyn)
  {
      case 118:
#line 74 "tmp/html-combo.y"
    { state = TAG_NAME ;}
    break;

C를 구문 분석하지 않고 테이블을 추출하는 방법이있을 수 있지만 YACC/Bison은 너무 무지합니다.

이를 위해 YACC/Bison을 사용할 수 있습니다. 처음에는 Bison을 살펴보면 상태 기계를 구현할 수있는 곳을 알기가 어렵습니다. 들소의 규칙은 왼쪽 오른쪽으로 해결됩니다. 즉; Rule1 Rule2 Rule3을 도출하는 규칙 (Rule0이라고 함)이있는 경우, 조치는이 순서로 호출됩니다 : Rule1, Rule2, Rule3, Rule0. 글로벌 상태 머신을 사용하여 규칙에 대한 동적 반환 값과 결합 할 수 있습니다 (문자열, int 또는 반환 값에 대한 컨테이너와 같은 다른 유형을 가진 Union을 사용합니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top