0

우리는 MVC (4,5)와 함께 일하고 일부 고객은 Google Analytics/facebook 픽셀 코드를 구현할 것을 요청합니다. 우리는 SEO 등의 전문가가 아니므로 고객이 제공하는 JS 코드를 가져 와서 우리가 호스트하는 웹 사이트 (코드의 빠른 검사 및 검사 후)에 구현합니다.사용자 입력에서 JS 스크립트 블록을 가져 오는 것이 좋습니다.

이제 우리는 자동 검사 및 구현을 위해 관리자 (고객)가 스크립트 블록 (자신의 분석 코드)을 우리 서버에 게시 할 수있는 일종의 CMS 페이지를 만들려고합니다. 관련 뷰 (mvc.net).

나는 두 가지 방법으로 생각했다. 1. txt/js의 파일 업로드를 사용하고 HttpPostedFileBase 및 BinaryReader를 사용하여 문자열로 구문 분석한다. 2. 스크립트를 입력 양식에서 텍스트로 가져옵니다.

우리는 방법 2를 선호합니다.하지만이 방법은 훨씬 위험합니다. 사용자가 컨트롤러에 "잠재적으로 위험한 코드"를 전달할 수 있도록 MVC의 요청 유효성 검사를 무시해야합니다.

다른 방법이 있습니까? 이러한 종류의 입력을 최종 사용자로부터 얻는 모범 사례는 무엇이라고 생각하십니까? 이것이 이전에 이루어 졌음을 확신합니다.

이는 방법 # 1 내 코드입니다 :

내가 함께 일한와 클라이언트는 항상 (100 %) 다음 코드를 깰 것 JS 코드를 추가 결국 CMS를 가진 유사한 문제가 있었다
[HttpPost] 
public ActionResult AnalitycsCMS(HttpPostedFileBase scriptFile) 
{ 
    if (scriptFile != null && scriptFile.ContentLength > 0) 
    { 
     // Validate through List of valid extentions and type (strings) 
     bool isValidExtention = extentions.Any(item => scriptFile.FileName.EndsWith(item, StringComparison.OrdinalIgnoreCase)); 
     bool isValidType = types.Any(item => scriptFile.ContentType.EndsWith(item, StringComparison.OrdinalIgnoreCase)); 

     if (isValidExtention && isValidType) 
     { 
      // Read bytes from http input stream 
      BinaryReader br = new BinaryReader(scriptFile.InputStream); 
      byte[] data = br.ReadBytes(scriptFile.ContentLength); 

      string result = System.Text.Encoding.UTF8.GetString(data); 
      ViewBag.ScriptFile = result; 
     } 
    } 
    return View(); 
} 
+0

[Google 태그 관리자] (https://www.google.com/analytics/tag-manager/)와 같은 것을 사용해 보셨나요? – Stu

+0

@Stu는 내 목표를 달성하는 데 어떻게 도움이 될 수 있는지 좀 더 자세히 설명합니다. –

+0

추적 및 태그 지정 (예 : Google 웹 로그 분석 또는 Facebook 재 타겟팅 등)을 실행하기 위해 특정 코드를 DOM에 추가하려고합니다. 그렇다면 바로 그것이 GTM의 기능입니다. 즉, 내부 솔루션을 제공 할 필요가 없습니다. – Stu

답변

0

그들은 시스템에 버그 리포트를 남깁니다. 라이브러리를 방해 할 라이브러리를 추가 할 것이고, 코드를 직접적으로 방해 할 코드 스 니펫이 있으므로 그렇게하지 않는 것이 좋습니다.

정말로 필요한 경우 이미 언급 한 댓글에서 Google 태그 관리자를 추천하거나 JS 코드가 네임 스페이스에 추가되었는지 확인하고 변수 충돌을 방지하기 위해 다른 태그로 둘러 쌉니다. 또한 라이브러리를 두 번 추가하지 않도록 라이브러리가로드 된 텍스트 입력 영역 근처에 메시지를 추가하십시오.