3

今天我将 HtmlEditorExtender 添加到我的 asp.net Web 应用程序中,一切正常,但我在这方面面临两个主要问题: 1. 如何设置 HtmlEditorExtender 将上传图像的图像上传位置。2. 我无法为这个 HtmlEditorExtender 启用 AntiXSS Sanitizer Provider 我遵循了这个页面 asp.net ajax 页面上的方法

但是当我把这段代码放在 Web.config

<sanitizer defaultProvider="AntiXssSanitizerProvider">
    <providers>
        <add name="AntiXssSanitizerProvider" 
        type="AjaxControlToolkit.Sanitizer.
          AntiXssSanitizerProvider"></add>
    </providers>
</sanitizer>

这强调了<sanitizer>标记并在调试时要求我提供一个 Sanitizer.cs 文件并告诉我无法加载类型“AjaxControlToolkit.Sanitizer.AntiXssSanitizerProvider”。(C:\Users\saurav\Documents\Visual Studio 2010\Projects\sauravtopnet\sauravtopnet\web.config 第 56 行) 'c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender 的定位源\HtmlEditorExtender.cs'。校验和:MD5 {79 93 7c d3 c7 ff b7 88 f af 76 3c 18 24 66 19} 文件 'c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender\HtmlEditorExtender.cs'不存在。在脚本文档中查找 'c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender\HtmlEditorExtender.cs'... 查看“c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender\HtmlEditorExtender.cs”的项目。在项目中找不到该文件。查看目录 'D:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\'... 查看目录 'D:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\mfc\'。 .. 查看目录 'D:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\src\atl\'... 查看目录 'D:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\ '...活动解决方案的调试源文件设置表明调试器不会要求用户查找文件:c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender\HtmlEditorExtender。 CS。

我应该告诉你,在 c:\Users\Stephen\Documents\Repos\Superexpert\AjaxControlToolkit\Server\AjaxControlToolkit\HtmlEditorExtender\HtmlEditorExtender.cs 中,Stephen 不是我系统上的任何用户,而不是调试器正在寻找此路径的原因。

我将这两行添加到页面后面的代码中

using AjaxControlToolkit.Sanitizer;
using Microsoft.Security.Application;

这是我的ajax代码

<ajaxToolkit:HtmlEditorExtender
    ID="hee" EnableSanitization="true"
    TargetControlID="txtComments"
    Runat="server" >
    <Toolbar> 
            <ajaxToolkit:Undo />
            <ajaxToolkit:Redo />
            <ajaxToolkit:Bold />
            <ajaxToolkit:Italic />
            <ajaxToolkit:Underline />
            <ajaxToolkit:StrikeThrough />
            <ajaxToolkit:Subscript />
            <ajaxToolkit:Superscript />
            <ajaxToolkit:JustifyLeft />
            <ajaxToolkit:JustifyCenter />
            <ajaxToolkit:JustifyRight />
            <ajaxToolkit:JustifyFull />
            <ajaxToolkit:InsertOrderedList />
            <ajaxToolkit:InsertUnorderedList />
            <ajaxToolkit:CreateLink />
            <ajaxToolkit:UnLink />
            <ajaxToolkit:RemoveFormat />
            <ajaxToolkit:SelectAll />
            <ajaxToolkit:UnSelect />
            <ajaxToolkit:Delete />
            <ajaxToolkit:Cut />
            <ajaxToolkit:Copy />
            <ajaxToolkit:Paste />
            <ajaxToolkit:BackgroundColorSelector />
            <ajaxToolkit:ForeColorSelector />
            <ajaxToolkit:FontNameSelector />
            <ajaxToolkit:FontSizeSelector />
            <ajaxToolkit:Indent />
            <ajaxToolkit:Outdent />
            <ajaxToolkit:InsertHorizontalRule />
            <ajaxToolkit:HorizontalSeparator />
            <ajaxToolkit:InsertImage />
        </Toolbar>
    </ajaxToolkit:HtmlEditorExtender>

这是我的参考

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

我已经下载并添加了所有三个 .dll。

4

6 回答 6

4

你做对的第一部分:

<configsections>
    <sectionGroup name="system.web">
    <section name="sanitizer" requirePermission="false" type="AjaxControlToolkit.Sanitizer.ProviderSanitizerSection,  AjaxControlToolkit" />
    </sectionGroup>
</configsections>

在你的system.web

<system.web>
    <sanitizer defaultProvider="AntiXssSanitizerProvider">
        <providers>
          <add name="AntiXssSanitizerProvider" type="AjaxControlToolkit.Sanitizer.HtmlAgilityPackSanitizerProvider" />
        </providers>
      </sanitizer>
</system.web>

的HTML:

 <asp:Textbox ID="replyBody" Height="400px" Width="892px" runat="server" TextMode ="MultiLine"  />
 <ajaxToolkit:HtmlEditorExtender ID="replyBody_HtmlEditorExtender" runat="server" Enabled="True" OnImageUploadComplete="saveFile"  ClientIDMode="AutoID" EnableSanitization="true"  TargetControlID="replyBody">
 <Toolbar>
     <ajaxToolkit:Bold />
     <ajaxToolkit:Italic />
     <ajaxToolkit:Underline />
     <ajaxToolkit:StrikeThrough />
     <ajaxToolkit:Subscript />
     <ajaxToolkit:Superscript />
     <ajaxToolkit:JustifyLeft />
     <ajaxToolkit:JustifyCenter />
     <ajaxToolkit:JustifyRight />
     <ajaxToolkit:JustifyFull />
     <ajaxToolkit:InsertOrderedList />
     <ajaxToolkit:InsertUnorderedList />
     <ajaxToolkit:CreateLink />
     <ajaxToolkit:UnLink />
     <ajaxToolkit:RemoveFormat />
     <ajaxToolkit:Cut />
     <ajaxToolkit:Copy />
     <ajaxToolkit:Paste />
     <ajaxToolkit:BackgroundColorSelector />
     <ajaxToolkit:ForeColorSelector />
     <ajaxToolkit:FontNameSelector />
     <ajaxToolkit:FontSizeSelector />
     <ajaxToolkit:Indent />
     <ajaxToolkit:Outdent />
     <ajaxToolkit:InsertHorizontalRule />
     <ajaxToolkit:HorizontalSeparator />
     <ajaxToolkit:InsertImage />
 </Toolbar>
 </ajaxToolkit:HtmlEditorExtender>

至于设置图像位置,它在AjaxControlToolkit.AjaxFileUploadEventArgs

属性是e.FileName检索文件名并e.postedUrl告诉控件您将其上传到何处,可以如下所示完成:

protected void saveFile(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
    string fullPath = "/Images/Upload_test/"+ e.FileName;

    // Save your File
    replyBody_HtmlEditorExtender.AjaxFileUpload.SaveAs(Server.MapPath(fullPath));

    // Tells the HtmlEditorExtender where the file is otherwise it will render as: <img src="" />
    e.PostedUrl = fullPath;
}

这对我来说效果很好。

于 2012-09-28T07:13:16.953 回答
0

我面临着完全相同的问题,而且我已经搞砸了好几天。

至少我现在取得了第一次成功。我正在关注本指南: http ://www.asp.net/web-forms/tutorials/ajax-control-toolkit/getting-started/using-ajax-control-toolkit-controls-and-control-extenders-cs

我正在写下对我来说最重要的步骤:

  • 创建 Web 窗体项目
  • 使用 NuGet 或手动安装都没有关系(我通过 NuGet 安装它并将工具箱条目链接到我项目的包文件夹中的 dll)
  • 我没有在我的项目的 web.config 中修复任何东西(尽管我需要看看消毒的东西作为接下来的步骤之一)
  • 我使用 ASP 脚本管理器,而不是 ajax 控件工具包之一

所以这是我的片段,它实际上对我有用(至少现在,看到任何不依赖斯蒂芬斯的电脑的东西现在对我来说都是成功的^^)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webforms._Default" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit.HTMLEditor" TagPrefix="cc1" %>
<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>hey ho</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      hello world!
    </div>
    <div>
      second div
      <br/>
      <asp:ScriptManager ID="ScriptManager1" runat="server">
      </asp:ScriptManager>
      <cc1:Editor ID="Editor1" runat="server" />
    </div>
  </form>
</body>
</html>
于 2012-07-13T15:38:13.570 回答
0

配置 Ajax HtmlEditorExtender 是一项非常艰巨的任务,但此链接:http: //stephenwalther.com/archive/2012/05/01/ajax-control-toolkit-may-2012-release.aspx将指导您如何设置图像上传路径和其他相关设置

下一个问题是如何设置 sanitizer 来保护您免受 XSS 攻击。实际上推荐的消毒剂供应商不能正常工作。看看我为此做了什么

  1. 从 Microsoft CodePlex 或通过 NuGet 下载 AntiXSS.4.2.1
  2. 现在解压缩 zip 文件,您将获得两个 .dll AntiXSSLibrary.dll 和 HtmlSanitizationLibrary.dll 将您的项目引用添加到这两个 .dll
  3. 现在添加using Microsoft.Security.Application;到页面后面的代码。
  4. 现在使用下面的代码来处理您想要通过它在 htmleditor 中获取并显示您的输入的任何按钮的单击事件。

这里 txteditor 是与您的 htmleditor 链接的 asp:textbox 的 id。任何文本框的输入始终由 .net 安全框架编码,因此首先解码输入 html 文本,然后<br>用我自己的单词替换标签,然后我将输入转发到将删除任何 XSS 攻击代码的消毒剂,但不幸的是,它也删除了 html 代码,<br>, <img src=""/> or <a href=""></a>这就是为什么我在<br>这里替换了标签,现在再次解码经过清理的 html,并用相应的标签替换您的文字。现在你可以在任何地方显示你的 html,就像我在 div1 中显示的那样。我认为这些信息。可以帮助您进一步的步骤。

String x = HttpUtility.HtmlDecode(txteditor.Text).Replace("<br>", "rrrbbbbrbrbrbrbr"); 
String y = Sanitizer.GetSafeHtmlFragment(x); 
div1.InnerHtml = HttpUtility.HtmlDecode(y).Replace("rrrbbbbrbrbrbrbr", "<br>"); 
txteditor.Text = HttpUtility.HtmlDecode(y).Replace("rrrbbbbrbrbrbrbr", "<br>");

将默认 sanitizer 设置为 false,如下所示:

    <ajaxToolkit:HtmlEditorExtender ID="ajaxeditor" OnImageUploadComplete="ajaxFileUpload_OnUploadComplete" TargetControlID="txteditor" DisplaySourceTab="false" EnableSanitization="false" Runat="server" >

无需在 web.config 中配置任何内容,也无需添加 www.asp.net 上推荐的 3 个 .dll

于 2012-07-13T16:59:07.663 回答
0

在我的情况下,将此设置为 false 对我有帮助,EnableSanitization="false".

于 2012-10-10T13:48:26.507 回答
0

正如上面的欺负者建议的那样,您将需要脚本管理器。但是,您将需要 ajax 工具包脚本管理器。我发现的另一件事是您需要在 web.config 中放置正确的设置才能正确上传文件。这两个设置都是必需的“安全”和“处理程序”。

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add name="AjaxFileUploadHandler" verb="*" path="AjaxFileUploadHandler.axd"type="AjaxControlToolkit.AjaxFileUploadHandler, AjaxControlToolkit" />
    </handlers>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="4294967295" />
      </requestFiltering>
    </security>
  </system.webServer>
于 2014-11-21T15:47:32.897 回答
-1

在 htmlediterextender 代码中上传图片

    protected void htmleditorextender_ImageUploadComplete(object sender, AjaxFileUploadEventArgs e)
       {
           string fullpath = Server.MapPath("~/images/") + e.FileName;

           editor_extender.AjaxFileUpload.SaveAs(fullpath);

           e.PostedUrl = Page.ResolveUrl("~/images/" + e.FileName);
       }
于 2013-02-03T07:57:54.100 回答