2014-10-17 46 views
0

我想要一个SQL函数来接收一个字符串,如point_str = "47.572820 -34.628906"。在函数内部,字符串将被转换成一个形状变量,例如通过SET xpoint = PointFromText(concat("POINT(", point_str, ")"));我是否需要清理用于声明几何形状的字符串?

在将这个字符串从php发送到sql之前,是否需要清理它(例如使用floatval)?

+1

如果这个点是用户输入的东西,那么是的。你需要清理它。如果你不仅仅是安全和消毒所有的东西,那么唯一的问题应该是“在任何时候**以任何方式**这个数据**受到用户的影响”。即使他们点击地图上的某个点,并且您正在从地图发送直接导出。用户创建该点,检查它。即使您已经有数据并且他们正在点击一个按钮以将数字加1,请检查它。即使你正在从db中查询一个值,只是为了将它插入到其他地方。如果用户添加了初始值,请检查它。 – 2014-10-17 18:19:05

+0

形状的数据将由用户输入,但不会存储在数据库中。如果仅仅通过使用bindValue传递给数据库并使用它来完成(不使用floatval或者类似于php中的任何东西),它会不安全吗? – 2014-10-17 18:27:00

+0

发送到服务器的数据可能不是一个数字。您至少需要验证一下。我可以在任何网站上发布表单,以任何我想要的值发布到您的服务器。我可以在发送到服务器之前去改变你的javascript值。我可以让浏览器提交任何我想要的假Ajax请求。要点是,这很容易做到。因此,就像我上面所说的那样,“**在任何时候都受到用户的影响,**是以任何方式获得的数据”? – 2014-10-17 18:38:43

回答

0

你可以在这两种情况下抛出一个错误;无论何时输入文本,何时读取。当数据被读取并且该功能未能生成形状时,该页面的所有访问者都将看到该错误。

如果您在创建时抛出错误,则只有一个人出错,并且错误的数据永远不会存在于您的数据库中。所以是的。如果输出依赖于输入,请确保输入适合输出并对其进行消毒。

相关问题