我开发了一个博客站点。用户可以发布他们的博客。
用户可以输入类似javascript,c#,java和html标签的代码,如强标签等......
我为了避免使用xss,我想替换下面所有危险的字符,但是这个安全吗?
WebForm1.aspx.cs:
public partial class WebForm1 : System.Web.UI.Page
{
public string V;
protected void Page_Load(object sender, EventArgs e)
{
V = HtmlEncode("Get content from DB");
}
public string HtmlEncode(string theString)
{
theString = theString.Replace(">", ">");
theString = theString.Replace("<", "<");
theString = theString.Replace(" ", " ");
theString = theString.Replace(" ", " ");
theString = theString.Replace("\"", """);
theString = theString.Replace("\'", "'");
theString = theString.Replace("\n", "<br/> ");
..................
..................
...................
return theString;
}
}
WebForm1.aspx的:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Test.WebForm1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%=V%>
</div>
</form>
</body>
</html>
答案 0 :(得分:3)
解决方案是让用户输入所谓的“bb-code”。
仍然使用Server.HtmlEncode
来阻止用户输入任何真实的标记,但允许输入替换。
例如,如果用户输入:
[b]test[/b]
在服务器端代码中用
替换它 <strong>test</strong>
同样适用于斜体,其他款式和颜色。这样您就可以控制允许的HTML子集。使用BB代码是论坛和博客的标准做法。