Javascript 如何防止用户恶意更改查询(laravel)

Javascript 如何防止用户恶意更改查询(laravel),javascript,php,ajax,laravel,encryption,Javascript,Php,Ajax,Laravel,Encryption,我有一个表单,它将以下数据发送到服务器: <!-- This form pulls, using JS event handlers, data from the table record selected --> <form id="edit_form" action="" method="POST" role="form"> {{ csrf_field() }} {{ method_field('PATCH') }} <div class="form-grou

我有一个表单,它将以下数据发送到服务器:

<!-- This form pulls, using JS event handlers, data from the table record selected -->
<form id="edit_form" action="" method="POST" role="form">
{{ csrf_field() }}
{{ method_field('PATCH') }}
 <div class="form-group">
    <label>ID do Cartão</label>
      <input type="text" class="form-control" name="idcartao_edit" placeholder="ID do Cartão" value="" />
  </div>
  <div class="form-group">
    <label>Nome do aluno</label>
      <input type="text" class="form-control"
          name="nome_aluno_edit" placeholder="Nome do Aluno" value="" />
  </div>
  <div class="form-group">
    <label>Email</label>
      <input type="email" class="form-control" name="email_edit" placeholder="E-mail" value="" />
  </div>
  <div class="form-group">
    <label>Curso</label>
      <select id="curso_edit" class="form-control" name="curso_edit">
          <option>Seleccionar curso...</option>
          @foreach($curso_list as $curso)
            <option value="{{$curso->encrypted_id}}">{{$curso->curso}}</option>
          @endforeach
      </select>
  </div>
  <div class="form-group">
    <label>Triénio</label>
    <!-- Trigerred by a JS event handler when a curso_edit option is selected -->
        <select id="trienio_edit" class="form-control" name="trienio_edit">
            <option>Seleccionar triénio...</option>
        </select>
  </div>
<!-- Triggered when user opens a bootstrap modal. Pulls the value from the table record selected -->
<input type="hidden" id="idcartao_original" name="idcartao_original" value="" />
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-primary">Editar aluno</button>
<button type="button" class="btn btn-default" data-dismiss="modal">Fechar</button>
</div>
</form>
此表单的问题在于,用户可以将id更改为其他id,查询将加载一个完全不同的用户。例如,在该输入字段上将值从1更改为2:

<input type="hidden" id="idcartao_original" name="idcartao_original" value="" />
它将加载如下模型:

public function update(Request $request, Aluno $aluno)
{   
    $id_aluno = $aluno->where('id_cartao', '=', $request->input('idcartao_original'))->first()->id;

    $aluno = $aluno->find($id_aluno);

    $aluno->id_cartao = $request->input('idcartao_edit');
    $aluno->nome = $request->input('nome_aluno_edit');
    $aluno->email = $request->input('email_edit');
    $aluno->trienio_id = decrypt($request->input('trienio_edit'));

    $aluno->save();

    return redirect()->route('alunos');
}
ID: 1
ID Cartão: 1011000
Nome: Joseph Wilson
E-mail: joseph.67@gmail.com
ID: 2
ID Cartão: 1011001
Nome: John Black
E-mail: johnblackwilliams@gmail.com
query by corresponding encrypted curso_edit id/value, encrypted trienio_edit id/value, unique email
然后继续改变数据,就像我说的,一个完全非故意的不同模型

我已经尝试过使用ajax调用向服务器发送加密ID,但考虑到输入结果可能是这样的:

public function update(Request $request, Aluno $aluno)
{   
    $id_aluno = $aluno->where('id_cartao', '=', $request->input('idcartao_original'))->first()->id;

    $aluno = $aluno->find($id_aluno);

    $aluno->id_cartao = $request->input('idcartao_edit');
    $aluno->nome = $request->input('nome_aluno_edit');
    $aluno->email = $request->input('email_edit');
    $aluno->trienio_id = decrypt($request->input('trienio_edit'));

    $aluno->save();

    return redirect()->route('alunos');
}
ID: 1
ID Cartão: 1011000
Nome: Joseph Wilson
E-mail: joseph.67@gmail.com
ID: 2
ID Cartão: 1011001
Nome: John Black
E-mail: johnblackwilliams@gmail.com
query by corresponding encrypted curso_edit id/value, encrypted trienio_edit id/value, unique email
光标编辑选项加密值是“TAI”选项的加密ID,例如

用户可以检查javascript代码,用上述选项中的另一个替换加密的光标编辑、三个光标编辑值和电子邮件

我怎样才能解决这个问题

p、 别对我太苛刻了。这个问题有点难以解释,如果你需要更多的细节,我已经尽力解释了


顺便说一句:我通过id、id、cartao、nome、email和关系、trienio和curso来组织模型。这在某种程度上是一个学校管理系统,因此,任何知道这些信息的人:课程(curso)、年份(trienio)、卡片id(id cartao,上面有id的学校卡片)、姓名(nome)和学生的电子邮件都很容易猜出列值。我需要更强壮、更无用的东西。考虑到学校环境,这些信息非常容易获得

您应该在FormRequest类的
authorize
方法中实现逻辑-如果用户没有访问该ID的权限,它应该拒绝这些信息。请参阅此处的示例,这是一个管理面板,以获得某种直观的数据库管理。不过,我计划很快实施角色。您还可以结合使用
id
和另一列来查找要编辑的模型。确实,用户可能知道要更改它的
id
,但她可能几乎不知道另一列的值。例如,您可以使用
id
token
的组合来实现这一点。我通过id、id、cartao、nome、email以及使用关系、trienio和curso来组织模型。这在某种程度上是一个学校管理系统,因此,任何知道这些信息的人:课程(curso)、年份(trienio)、卡片id(id cartao,上面有id的学校卡片)、姓名(nome)和学生的电子邮件都很容易猜出列值。我需要更强壮、更无用的东西。。。如何在前端确定他们可以查看/编辑哪些数据?保存时在后端重复类似的过程。。。