Пароль виден в пользовательском контроле ext.net - PullRequest
0 голосов
/ 30 мая 2018

Пользовательский контроль (ascx) с вводом пароля.Щелкните правой кнопкой мыши, осмотрите - значение видно.Этого не происходит, если пароль вводится в формате aspx.

Хмм, кажется, мне нужно добавить сюда некоторые сообщения, поскольку платформа не позволяет мне публиковать эту тему из-за "в основном кода".

Default.aspx

<%@ Page Language="C#" %>

<%@ Register Src="UserPassword.ascx" TagName="UserPass" TagPrefix="uc" %>

<script runat="server">

   protected void Page_Load( object sender, EventArgs e )
   {
      if ( !X.IsAjaxRequest )
      {
         this.BindUser();
      }
   }

   public void BindUser()
   {
      userPass1.UserName = "AliBaba";
      userPass1.Password = "OpenSesame";
   }
</script>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
   <title>Password inspect bug</title>
</head>
<body>
   <form id="form1" runat="server">
      <ext:ResourceManager runat="server" />

      <ext:Window
         ID="Window1"
         runat="server"
         Icon="User"
         Closable="false"
         Title="Customer Details"
         Width="350"
         Height="230"
         Resizable="false"
         BodyStyle="background-color:#fff;"
         BodyPadding="5"
         Layout="Anchor">
         <Items>
            <ext:Panel ID="panel1" runat="server" Header="false" Layout="FitLayout">
               <Content>
                  <uc:UserPass ID="userPass1" runat="server"></uc:UserPass>
               </Content>
            </ext:Panel>
         </Items>
      </ext:Window>
   </form>
</body>
</html>

UserPassword.ascx

<%@ Control Language="C#" %>

<script runat="server">
   public string UserName
   {
      get { return this.txtUser.Text; }
      set { this.txtUser.Text = value; }
   }

   public string Password
   {
      get { return this.txtPassword.Text; }
      set { this.txtPassword.Text = value; }
   }
</script>

<ext:Panel ID="panel1" runat="server" BodyPadding="5" Layout="AnchorLayout">
   <Items>
      <ext:Panel ID="panel2" runat="server" Border="false" Header="false" AnchorHorizontal="100%" Layout="FormLayout">
         <Items>
            <ext:TextField ID="txtUser" runat="server" FieldLabel="User" />
            <ext:TextField ID="txtPassword" runat="server" FieldLabel="Password" InputType="Password" />
         </Items>
      </ext:Panel>
   </Items>
</ext:Panel>

Есть ли какие-либо известные обходные пути?

1 Ответ

0 голосов
/ 31 мая 2018

Краткий ответ: используйте this.txtPassword.setValue(value), а не this.txtPassword.Text = value, чтобы исправить вашу прямую проблему.

Длинный ответ: почему вы устанавливаете пароль с сервера?В соответствии с передовой практикой пароли хранятся на сервере в виде хэшей, поэтому вы на самом деле не знаете реального пароля пользователя, вы просто сравниваете два хэша.

public string Password
{
   get { return this.txtPassword.Text; }
   set { this.txtPassword.Text = value; }
}

Если вы хотите автоматически заполнить пароль, который яПредположим, что вы делаете, вам нужно использовать куки.

if (Request.Cookies["username"] != null)
{
     this.txtUsername.setValue(Request.Cookies["uid"].Value);
     this.txtPassword.setValue(Request.Cookies["pwd"].Value);
}
...