2014-03-28 2 views
0

이것을 작성했습니다. 그러나 그것은 사악한 평가를 사용하고 있습니다. 이 작업을보다 명확하게 처리하기위한 지침. 내 위생 처리 방법이 충분히 좋은가요? 스택을 검색하여 다른 답변을 찾았지만 올바른 방법으로 나를 뛰어 넘지 않았습니다..단일 텍스트 요소의 값을 계산하십시오

<input class="simple-math" name="TheCalculation" value=""> 

최종 사용자는 5 + 3 또는 무언가에 입력합니다 및 상자는 어떤 의미에서 클리너 8

$().ready(function() { 
     $(".simple-math").change(function() { 
      // get the current val 
      var raw = $(this).val(); 
      // sanitize, so a smarty-pants can't do bad stuff 
      var sanitize = raw.replace(/[^0-9\+\-\*\/\%\(\)]+/, ""); 
      // eval the input 
      var calc = eval(sanitize); 
      // set the value 
      $(this).val(calc); 
     }) 
    }); 
+3

일반적으로 서버에서 사용자가 입력 한 데이터를 출력하는 경우 'eval'은 악의적입니다. 사용자가 입력 한 내용을 '평가'하는 중이라면 자신에게 "나쁜 물건"은 무엇입니까? – Tesserex

+0

@Tesserex 아주 잘 설명되어 있습니다. –

+0

질문과 관련된 jQuery에 대한 의존성이 표시되지 않습니다. – RobG

답변

0

에 값을 업데이트?

  1. 입력을 구문 분석하고 자신의 계산을하지만, 평가 꽤 많이 당신을 위해 것을 수행합니다 거기에 몇 가지 대안이 있습니다.

  2. 사용자가 표현식을 작성하기 위해 제공 한 토큰에만 사용자가 액세스 할 수 있도록 계산기와 같은 UI를 제공하십시오. 표현식의 유효성을 검사 한 다음 결과를 eval (또는 직접 구문 분석)으로 전달합니다. 충분

살균 방법

그것은,이 기간 및 e을 제거합니다이 기간을 제거하므로 2.5 * 32.3e3 * 6 같은 식의 결과를 너무 아마 영향을 미칠 것

.

관련 문제