우리는 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();
}
[Google 태그 관리자] (https://www.google.com/analytics/tag-manager/)와 같은 것을 사용해 보셨나요? – Stu
@Stu는 내 목표를 달성하는 데 어떻게 도움이 될 수 있는지 좀 더 자세히 설명합니다. –
추적 및 태그 지정 (예 : Google 웹 로그 분석 또는 Facebook 재 타겟팅 등)을 실행하기 위해 특정 코드를 DOM에 추가하려고합니다. 그렇다면 바로 그것이 GTM의 기능입니다. 즉, 내부 솔루션을 제공 할 필요가 없습니다. – Stu