我正在使用Jquery/ Ajax/ PHP/ 开发一个非常简单的1层评论系统MYSQL.该页面最初显示用户可能发布回复的主要评论.
<div id="com100">Parent Comment</div>
Run Code Online (Sandbox Code Playgroud)
我被建议使用父注释的divid值com100作为每个相应回复的语句中的父IDMYSQL INSERT.
我的问题:这样安全吗?无法将div's值id任何用户都可以改变?可能插入与错误评论相关的回复,或者更糟糕?
数据正在验证并bindParam正在使用中.我更关心在错误的父评论下存储的回复.任何建议表示赞赏.
主要问题,实际上是div ID 如何传递到后端.据推测,使用您正在使用的技术,您将使用Javascript/jQuery获取ID,然后使用标准POST请求将其发送到服务器.在这种情况下,它是易受攻击的POST请求.有人将能够读取您的代码,查看数据如何发布到服务器,然后使用不同的ID伪造相同的呼叫.
到目前为止,在客户端,你通常可以依赖DIV的ID - 使用你的jQuery获取它们而不进行验证,假设它们是正确的,服务器生成的值,等等.在POST进入后,应在服务器端完成ID的验证.ID是否有意义?这个评论是否存在?是否允许经过身份验证的用户在该父ID下发布评论等.
因此,不要担心人们在文档中更改DIV ID,因为这只是一种复杂且不太可能的方式,无论如何都可以通过伪造的POST请求来完成.但也验证数据的服务器端,一旦POST用武之地.
从根本上说,这不要紧,你在客户端有多大验证做,因为攻击者不必使用任何的你的代码,以假POST请求.他们只需要知道你要发布的URL以及POST变量的名称,通过阅读代码或者只是拦截你的有效POST请求,他们总是可以轻松获得这些名称.您可以在客户端验证真正的用户错误,甚至是您自己代码中的错误,但您应该在服务器端验证安全性和数据完整性.