消毒PHPSESSID

消毒PHPSESSID,php,session,sanitization,Php,Session,Sanitization,我将PHPSESSID传递到一个PHP页面(通过POST),我想知道什么是最好的净化输入的方法。mysql\u real\u escape\u string?在处理会话ID(我的意思是,它们只能是字母和数字,对吗?)时,有什么特别的东西我应该考虑吗 编辑: 为了澄清这个问题,我真正想知道的是:如果有人篡改POST数据,他是否可以发送一个恶意字符串作为PHPSESSID,当我调用session\u id($\u GET['PHPSESSID'))? 我个人想不出什么,但安全总比抱歉好 谢谢 nic

我将PHPSESSID传递到一个PHP页面(通过POST),我想知道什么是最好的净化输入的方法。
mysql\u real\u escape\u string
?在处理会话ID(我的意思是,它们只能是字母和数字,对吗?)时,有什么特别的东西我应该考虑吗

编辑: 为了澄清这个问题,我真正想知道的是:如果有人篡改POST数据,他是否可以发送一个恶意字符串作为PHPSESSID,当我调用
session\u id($\u GET['PHPSESSID'))
? 我个人想不出什么,但安全总比抱歉好

谢谢


nico的想法很好,但据我所知,没有必要对这个输入进行消毒。PHPSESSID将被传递到
会话\u id()

会话id确实有

根据会话处理程序的不同,会话id中不允许所有字符。例如,文件会话处理程序只允许范围为a-z a-z 0-9、(逗号)和-(减号)的字符

但是
session\u id()
应该使用错误消息处理与这些规则的偏差。(您可能希望捕获该错误消息,并在出现错误时终止脚本。)

我能看到的唯一真正的危险是当您使用自定义会话处理程序(例如连接到数据库)时。在这种情况下,您必须对输入进行清理,例如使用
mysql\u real\u escape\u string()
。但是,这应该发生在自定义会话处理程序中


不用说,如果您在其他上下文中使用会话ID(例如,作为HTML表单中的参数),那么您需要为特定输出采取必要的卫生措施(在这种情况下,
htmlspecialchars()
)。

如果您确实需要通过POST传递会话ID(看不出原因是什么…)你知道你想允许什么字符,我会用正则表达式来检查

mysql\u real\u escape\u string
用于数据库输入,需要数据库连接,不进行任何清理,只是转义一些特殊字符

mysql\u real\u escape\u字符串是否足够

错。应始终使用适当的方法将数据清理到要将值写入的位置。只有在向mysql数据库写入值时,才使用mysql\u real\u escape\u string()

你的评论并不清楚你到底在做什么。您的意思是说您正在使用PHP中的curl来创建帖子吗?如果是这样的话,那么如果将CURLOPT_POSTFIELDS作为数组传递,则不需要进行清理(严格来说不是真的,但是curl会为您进行清理),但是如果将CURLOPT_POSTFIELDS作为字符串传递,则需要对值进行URL编码

是否将值写入浏览器,以便用户可以提交值?在这种情况下,您将使用htmlentities()将值写入表单字段


还有别的吗?

为什么要对它进行消毒?它(在大多数情况下)是自动生成的。良好的安全意识+1thinking@abrik:当然,它是自动生成的,我只是担心有人会伪造帖子数据并对其进行恶意处理。不知道他们能做什么,但这就是为什么我问这个问题!他们甚至可以伪造会话cookies。谢谢你的回答。我正在使用一个依赖于Flash的脚本,我需要通过PHPSESSID,因为Flash不会自动为我完成它。。。这只是一页,我不确定PHPSESSID有什么危险(如果有的话)。脚本无论如何都要连接到数据库,所以我想到了
mysql\u real\u escape\u string
,但我不确定是否需要它。谢谢你,佩卡,这是我的想法,但我认为问一个愚蠢的问题比犯愚蠢的错误要好!)关于
htmlentities
,您说得很好,谢谢。正如我对jeroen所说的,页面是由Flash调用的,会话不会被传递,所以我只是发布PHPSESSID,以便在Flash调用的PHP文件中重新创建会话。(我正在使用JQuery Uploadify并使用scriptData参数传递会话id,正如他们建议的那样)。