1

私はいくつかのコードを作りました。私はかなり小さなフレームワークを使用しています。

    <script type="text/javascript">
function generateNormal(type, text, layout)
{
    if (typeof(layout)==='undefined') layout = 'topRight';
    var n = noty(
    {
        text: text,
        type: type,
        dismissQueue: true,
        theme: 'default',
        layout: layout
   }
   );    
}
function generateButtonDelete(id)
{
    if (typeof(layout)==='undefined') layout = 'topRight';
    var n = noty(
    {
        text: 'Are you sure you want to delete the record?',
        type: 'alert',
        dismissQueue: true,
        theme: 'default',
        layout: 'center' ,
        buttons: [
                  {addClass: 'btn btn-primary', text: 'Ok', onClick: function($noty) {
                    $noty.close();
                    $.post("delete.php", {id: id },
                            function(data) {
                                if (data)
                                {
                                    generateNormal('success', 'The record is deleted with succes!')       
                                }
                                else
                                {
                                    generateNormal('error', 'There is a problem with the database, please try again.')
                                }
                            });                    
                  }
                  }
    ]
   }
   );    
}


</script>

上記のコードは、PHP によって生成されたテーブルによって使用されます。

<table>
<tr>
    <th>
        Delete
    </th>
    <th>
        ID
    </th>
    <th>
        Description 
    </th>
</tr>
<!--  This section will be created by PHP -->
<tr>
    <td>
        <a href="#" onclick="generateButtonDelete(1)">Delete</a>
    </td>
    <td>
        1
    </td>
    <td>
        Description row 1 
    </td>
</tr>
    <tr>
    <td>
        <a href="#" onclick="generateButtonDelete(2)">Delete</a>
    </td>
    <td>
        2
    </td>
    <td>
        Description row 2 
    </td>
</tr>
<!--  End of section that will be create by PHP -->

delete.php ファイルでは、レコードを削除するためのクエリが PHP を使用して実行されます。そして、クエリがうまく実行されたかどうかにかかわらず、true または false をエコーし​​ます。

コードは、コンソールにエラーが発生することなく完全に機能します。しかし、これが安全かどうかはわかりません。これは単なる概念実証です。HTML と PHP ページは、ログイン スクリプトで保護されます。

これが安全かどうか、誰かが私に言ってくれることを願っていますか?

私の悪い英語でごめんなさい。

編集: 私はいくつかの PHP コードを作成しました。しかし、これは単なる概念実証であるため、コードをテストしませんが、Eclipse はエラーを出しません。

    <?php 
if (isset($_POST['id']))
{
    if (is_int($_POST['id']))
    {
        if ($_POST['id'] > 0)
        {
            $con = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password');
            $sql = "DELETE FROM table_name WHERE id=?";
            $q = $con->prepare($sql);
            $execution = $q->execute(array($_POST['id']));

            if ($execution) echo true;
            else echo false;
        }   
        else echo false;
    }
    else echo false;
}
?>
4

3 に答える 3

2

SQL インジェクションに関する限り、コードは安全です。これらの if else ステートメントを次のように整理できます。

if (isset($_POST['id']) && (int) $_POST['id'] > 0) {

私が見る唯一の問題は、ユーザーがレコードを削除できることを確認していないことです。そこにはいくつかのセッションロジックもあり、現在のユーザーが所有者/管理者であることを確認するためのクエリがあると思います削除するレコードの。

于 2012-08-02T09:36:10.373 に答える
1

の使用法について危険なことは何もありません$.post()

安全性は、MySQLクエリなどで使用する前に、何らかの方法でサニタイズされているdelete.phpことを確認する必要がある場所で注意を払う必要があります。$_POST['id']

于 2012-08-02T09:26:31.523 に答える
1

$.post() の使用法は私には問題ないようです。主な (推奨される) 使用法に従ってください - データをサーバーに投稿します。

于 2012-08-02T09:18:07.447 に答える