如何在不影响asp.net默认安全性的前提下使用ckeditor/fckeditor?
时间:2022-04-23
本文章向大家介绍如何在不影响asp.net默认安全性的前提下使用ckeditor/fckeditor?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
asp.net默认情况下,不允许提交包含html源代码的表单,这在很大程度上防止了跨站(提交)攻击,但是ckeditor/fckeditor之类的富文本编辑器肯定是要生成html源代码的,如何解决这个矛盾?
通常的办法是修改web.config
asp.net2.0/3/3.5时可以这样做:
<pages validateRequest="false"></pages>
asp.net4.0下,这样还不够,必须写成这样:
<pages validateRequest="false"></pages>
<httpRuntime requestValidationMode="2.0"/>
这样虽然解决了问题,但是同时也降低了安全性,如何在不降低asp.net默认安全性的前提下使用ckeditor/fckeditor?
思路: 客户端--表单中增加一个隐藏域,提交时先把ckeditor/fck的内容用url编码后,赋值给该隐藏域,然后清空ckeditor/fck,再提交,这样提交过去的内容就不包含html源代码了。
服务端--接收该隐藏域的值做为ckeditor的内容,同时接收时先url解码
代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ckeditor_demo.Default" %>
<!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></title>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<script type="text/javascript" src="js/sample.js"></script>
<link type="text/css" rel="stylesheet" href="css/sample.css" />
</head>
<body>
<form id="form1" runat="server">
<div id="alerts">
<noscript>
<p>
<strong>CKEditor需要JavaScript支持才能运行!</strong>如果您的浏览器不支持或禁止运行Javascript,您只能用常规方式在普通文本输入框里编辑html代码
</p>
</noscript>
</div>
<textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10"><p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p></textarea>
<input type="hidden" id="_editor1" name="_editor1" value="" />
<br />
<input type="button" value="获取编辑器html内容" onclick="getData()" />
<input type="button" value="设置编辑器html内容" onclick="setData()" />
<input type="button" value="设置焦点" onclick="setFocus()" />
<input type="submit" value=" 提 交 " onclick="return onSubmit(this)" />
<hr/>
<asp:Label runat="server" ID="lblMsg"></asp:Label>
</form>
<script type="text/javascript">
//获取ckeditor内容
function getData() {
var editor = CKEDITOR.instances.editor1;
alert(editor.getData());
}
//设置ckeditor内容
function setData() {
var editor = CKEDITOR.instances.editor1;
var _content = "<div style='color:red'>红色字体</div>";
editor.setData(CKEDITOR.tools.htmlEncode(_content));//这里调用了ckeditor工具库的htmlEncode方法
}
//设置ckeditor的焦点,并高亮背景显示
function setFocus() {
var editor = CKEDITOR.instances.editor1;
editor.focus();
editor.document.$.body.style.cssText = "background-color:#ff9";
}
//点击提交时
function onSubmit(btn) {
var editor = CKEDITOR.instances.editor1;
var editor1 = document.getElementById("editor1");
if (editor.getData().length == 0) {
alert("请输入详细介绍!");
editor.focus();
editor.document.$.body.style.cssText = "background-color:#ff9";
return false;
}
else {
var _editor1 = document.getElementById("_editor1");
_editor1.value = encodeURIComponent(editor.getData());
editor.setData("");//清空ckeditor
setTimeout(doSubmit, 200); //延时0.2秒再提交,否则ckeditor会报js出错,原因不明(估计是ckeditor设置内容后,还要执行其它回调函数代码,所以这时马上提交的话,某些代码还没完成,延时等待代码执行完成后,再提交就可以了)
btn.disabled = true;//提交按钮设置为不可用,防止重复提交
}
return false;
}
function doSubmit() {
document.forms[0].submit();
}
</script>
</body>
</html>
- silverlight 背景透明
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
- 如何利用深度学习识别千万张图片?
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表
- 43 Hot Flex and ActionScript 3.0 APIs, tips and tools for Autumn 2008
- 异步数据存储
- 谈谈基于SQL Server 的Exception Handling[中篇]
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
- 如何仅使用TensorFlow C+来训练深度神经网络
- 捕获silverlight滚轮事件
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 内置函数值 -- chr() ord() -- 字符和ascii的转换
- python内置函数-compile()
- 02 . Shell变量和逻辑判断及循环使用
- Python内置函数(21)——filter
- 内置函数 -- filter 和 map
- 内置函数--global() 和 local()
- python file文件操作--内置对象open
- 07 . Prometheus监控Memcached并配置Grafana
- 内置函数 -- bytes -- 字节码与字符串相互转换
- 01 . Shell详细入门介绍及简单应用
- 06 . Prometheus监控Redis并配置Grafana
- Django实现图片上传并前端页面显示
- 04 . Prometheus(联邦集群)监控MySQL
- 01 . MongoDB简介及部署配置
- 06 . Jenkins分布式构建和Pipline