替换危险的char避免xss?

时间:2013-09-19 00:52:29

标签: asp.net xss

我开发了一个博客站点。用户可以发布他们的博客。

用户可以输入类似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("<", "&lt;");
            theString = theString.Replace(" ", "&nbsp;");
            theString = theString.Replace(" ", "&nbsp;");
            theString = theString.Replace("\"", "&quot;");
            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>

1 个答案:

答案 0 :(得分:3)

解决方案是让用户输入所谓的“bb-code”。

仍然使用Server.HtmlEncode来阻止用户输入任何真实的标记,但允许输入替换。

例如,如果用户输入:

 [b]test[/b]

在服务器端代码中用

替换它
 <strong>test</strong>

同样适用于斜体,其他款式和颜色。这样您就可以控制允许的HTML子集。使用BB代码是论坛和博客的标准做法。