0

ワンタイムパスワードの簡単なシミュレーションを作成したいと思います。問題は、マスターページの子ページにいて、1つのコンテンツプレースホルダーに1つのasp.netフォームしか持てず、もう1つにはランダムコードを生成するjavascriptコードが含まれていることです。

このコードをasp.netに渡して、ユーザーが検証をクリックしたときに、入力したコードをjavascriptによって生成されたランダムコードと比較できるようにするにはどうすればよいですか(ajaxかもしれませんが、方法がわかりませんか?)

2つのasp.netフォームがあれば、問題はありません。

更新:Andreiによって提案された解決策を含めるために、以下のソースコードを変更しました。

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <form id="form1" runat="server">
        Username: <asp:TextBox ID="txtUserName" runat="server" /></br>
        OTP: <asp:TextBox ID="txtOTP" runat="server" /></br>
        <asp:TextBox ID="OtpHiddenField" runat="server" /></br>
        <asp:Button ID="btnValidate" runat="server" onclick="btnValidate_Click" Text="Validate" /></br>
</form>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
<h2>Fake OTP Simulation</h2>
Enter "John"
</br>
Enter OTP 
<script type='text/javascript'>
    var pass = String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9));
    document.write(pass);
    document.getElementById('<%= OtpHiddenField.ClientID %>').value = pass;
</script>
4

1 に答える 1

1

生成された値を、フォームと共に投稿される非表示フィールドに挿入できます。

<asp:Content ID="Content2" ContentPlaceHolderID="HeadContent" Runat="Server">
    <form id="form1" runat="server">
        Username: <asp:TextBox ID="txtUserName" runat="server" /><br/>
        OTP: <asp:TextBox ID="txtOTP" runat="server" /><br/>
        <asp:Button ID="btnValidate" runat="server" onclick="btnValidate_Click" Text="Validate" /><br/>
        <asp:HiddenField ID="OtpHiddenField" runat="server" />
</form>
</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
<h2>Fake OTP Simulation</h2>
Enter "John"
<br/>
Enter OTP 
<script type='text/javascript'>
    function getRandomInt(min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    var pass = String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9)) + String(getRandomInt(0, 9));
    document.write(pass);
    document.getElementById('<%= OtpHiddenField.ClientID %>').value = pass;
</script>
</asp:Content>

そして、このアプローチが非常に脆弱であることを認識していただければ幸いです。

于 2012-09-13T13:43:26.273 に答える