6 に答える
あなたが正しかった最初の部分:
<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;
}
それは私にとって非常にうまくいきました。
私はまったく同じ問題に直面しており、何日もそれをいじっていました。
少なくとも私は今、最初の成功を収めました。私はこのガイドに従っていました: 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 で何も修正しませんでした (ただし、次のステップの 1 つとしてサニタイズを確認する必要があります)。
- ajax コントロール ツールキットではなく、ASP スクリプト マネージャーを使用します。
だから、これが実際に私のために働く私のスニペットです(少なくとも今のところ、スティーブンスのPCに依存しないものを見ることは今のところ成功です^^)
<%@ 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>
Ajax HtmlEditorExtender を構成するのは非常に困難な作業でしたが、このリンク: http://stephenwalther.com/archive/2012/05/01/ajax-control-toolkit-may-2012-release.aspxは、画像のアップロードを設定する方法を案内します。パスおよびその他の関連設定
次の問題は、XSS 攻撃から保護するためにサニタイザーをセットアップする方法でした。実際、推奨されるサニタイザー プロバイダーは正しく機能しません。そのために私が何をしたか見てください
- Microsoft CodePlex または NuGet から AntiXSS.4.2.1 をダウンロードします。
- zip ファイルを解凍すると、2 つの .dll が取得されます。
using Microsoft.Security.Application;
コード ビハインド ページに追加します。- ここで、htmleditor で入力を取得して表示する任意のボタンのクリック イベントで、以下のコードを使用します。
ここで、txteditor は、htmleditor にリンクされている asp:textbox の ID です。テキストボックスの入力は常にセキュリティのために.netフレームワークによってエンコードされるため、最初に入力htmlテキストをデコード<br>
し、タグを自分の単語に置き換えてから、入力をサニタイザーに転送してXSS攻撃コードを削除しますが、残念ながらそのようなhtmlコードも削除し<br>, <img src=""/> or <a href=""></a>
ますここでタグを置き換えて、<br>
サニタイズされた html を再度デコードし、単語を対応するタグに置き換えます。これで、div1 に表示されているように、どこでも html を表示できます。これらの情報だと思います。さらなるステップであなたを助けることができます。
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>");
次のように、デフォルトのサニタイザーを false にします。
<ajaxToolkit:HtmlEditorExtender ID="ajaxeditor" OnImageUploadComplete="ajaxFileUpload_OnUploadComplete" TargetControlID="txteditor" DisplaySourceTab="false" EnableSanitization="false" Runat="server" >
web.config で何も構成する必要はなく、www.asp.net で推奨されている 3 つの .dll を追加する必要もありません。
いじめっ子が上で示唆したように、スクリプト マネージャーが必要になります。ただし、ajax ツール キットのスクリプト マネージャーが必要です。私が見つけたもう 1 つのことは、ファイルを正しくアップロードするには、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>
これをfalseに設定すると、私の場合に役立ちましたEnableSanitization="false"
.
htmleditorextender コードで画像をアップロードする
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);
}