English 中文(简体)
表格
原标题:Form POST or sessions?
  • 时间:2011-01-07 19:50:03
  •  标签:
  • php
  • forms

如果你有一个项目允许用户补充评论,那么你如何通过用户正在答复的哪项内容?

我虽然使用了一种隐蔽的现场,但可以很容易地利用火力等gin变:

<form method="post" action="blah">
<input type="hidden" name="item_id" value="<?php echo $item_id; ?>">
<!-- other form data here -->
<input type="submit" name="submit">
</form>

或者仅仅使用一届会议:

$_SESSION[ item_id ] = $item_id

是否有安全的方法以某种形式发送项目数据?

Edit: This is after validation,... I do implement some XSS protection (form tokens etc). The reason I was asking was just to know what the best practise is.

我是这样做的。

$_SESSION[ item_id ] = $id //this is set when they visit the current item

之后,形式上有一个隐蔽的领域:

<input type="hidden" name="item_id" value="<?php echo $id?>">

最后,会议对被点击:

if ($_SESSION( item_id ) !== $item_id) //the value posted in the form
{
   die( There s got to be a morning after
       If we can hold on through the night
       We have a chance to find the sunshine
       Let s keep on looking for the light );
}

然而,在阅读你的一些评论之后,你做了一些评论。 我认为这是一个坏的想法?

公平(www.surreal Hopes):我刚才说过,如果大宗交易确实改变id,我就看着最佳做法。

乘客。

最佳回答

您建议的会议方式将重述以下情形:(1) 访客在多个表格中开几条不同的文章;(2) 试图就最后开张的表格以外的任何表格撰写答复。 用户甚至可以在不同的表格中同时撰写两份答复;我有时在StackOverflow这样做。 网络开发商很容易忘记,今天的参观者可能同时开放几个浏览器。 事实上,我们再不使用IE6。

解决办法是使<代码>_SESSION[项目_id]成为一系列最近看得见的文章识别器,但随后,你却不能够阻止一些消防用户(或任何其他技师)对以前看过的文章作出答复。 增加时间限制也没有任何变化。

But why would somebody intentionally change the ID of the post to which they re replying, except to troll or spam the site? And if somebody really wanted to screw your site, they can easily get around any protection by making their bot request the appropriate page just before posting a spam comment. You d be much better off investing in a better CSRF token generator, spam filter, rate limiter, etc.

问题回答

利用隐蔽领域。

如果使用者修改了OMM的说法,那是对不同评论的答复,那么什么? 这只影响到他们。

如果你想要限制用户的答复,那么,你需要实施适当的出入控制层,而不是试图在用户接口中加以执行。

正如你可能从愤怒、itch滴虫ding中注意到的那样,由于诸如多个表格的问题,这两种解决办法都无法得到满足。

如果人们真正担心能够就另一个目标发表评论,那么他们最初访问的那一个目标就是考虑使用一个阵列以“SESSION”的形式储存这些物品,并用一种隐蔽的形式将其重新定位。 如果所贴出的价值没有在阵列中,则显然是一个他不考虑的职位。

扩大防tam性,考虑 ID取(当然还有宽松的盐类),并储存在阵列中。

我是否注意到,我觉得你可能试图解决这里的错误问题;为什么没有人能够就他所评论的职位发表评论? 如果你能够进入,那么就应当允许你发表意见——如果你想要篡改身份证,使你的评论最终落到错误的岗位上——这从根本上讲是你的问题。 我指的是,用户也可以到另一个职位上来,以人工方式作出错误评论......这样,问题是什么?

你可以采取这样的形式。

<?
$saltedhash = md5("MYSEED"+$item_id;)
?>

<form method="post" action="blah">
<!-- form data here -->
<input type="hidden" name="item_id" value="<? echo $item_id ?>">
<input type="hidden" name="item_hash" value="<? echo $saltedhash ?>">
<input type="submit" name="submit">
</form>

This was, you can always check that the passed item_id matches its corresponding hash and see if the user changed it.

然而,正如其他人所指出的,这并没有阻止用户在不同的项目上张贴,如果他们能够从某个地方获得洗衣。 最好是建立出入控制机制。

很奇怪,你很可能使用隐蔽的形式要素。 如果你真心关心改变这一条的人的话,你可以总是<条码>64(<>条码/代码>编码,使之更难改动。

然而,你总是可以在网页上设定一个会议变量,然后提交表格时将这一数值重新计算。

<>>Form

<?
session_start();

//Make a random ID for this form instance
$form_id = rand(1, 500);

//Set session variable for this form
$_SESSION[$form_id][ item_id ] = $item_id;
?>

<form method="post" action="process.php?n=<?=$form_id?>">
<!-- form data here -->
<input type="submit" name="submit">
</form>

<>Process

<?
session_start();

//Process only if the number submitted matches the SESSION variable
if(array_key_exists($_GET[ n ], $_SESSION) {
  //Process tasks
  echo $_SESSION[$_GET[ n ][ item_id ];

  //Unset session variable when done processing
  unset($_SESSION[$_GET[ n ]);
}
?>

利用“SESSION”来储存该员额,是理想的解决办法,因为它确实避免了改变这一价值的能力。

这就是说,这样做的人有什么好处? 同样,许多评论系统也有一个批准程序,需要一个行政机构在张贴前批准该评论。

不过,我建议坚持会议价值。





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签