好吧,我是 PHP 新手,但是这些天来思考这些东西真的让我很困惑。
这是我的详细问题:
首先,我需要在客户端和服务器之间传输数据。应该使用 Ajax 在客户端呈现数据。在服务器端,将使用 PHP 和 MySQL 来解析请求,抓取数据,然后将其发送回。
那么问题来了。浏览器发送的用户数据可以包含&, %, ', "这可能会损坏格式化的POST请求或进行数据库攻击。虽然我们可以使用JS来检测它们,但用户仍然可以绕过验证发送数据,更不用说我们不能简单地删除它们,因为它们可能对用户有用。
然后我检查了我的武器库。在服务器端,事实证明我有太多的功能来处理它们:
除了常规的表达之外,我还有
htmlspecialchars, htmlspecialchars_decode, addslashes, stripslashes
urlencode, urldecode, mysql_escape_string, mysql_real_escape_string
在使用javascript的客户端,我没有那么多但仍然有:
escape, unescape
好的。知道自己有这么多武器很好,但是……如何选择、组合和使用它们真的让我很头疼。
例如,假设我想要一个名为的产品名称:
'%万岁%'+&ABC
好吧,也许现实生活中不会有这样的产品被命名,但让我们以它为例。
& 标记将中断 POST 消息。
+ 可能会影响 ajax 解析。
单引号可能允许 SQL 注入。
% 标记可能会导致问题,但我不确定它是否会。
但是在将它发送到数据库并取回之后,我仍然希望该名称完全相同,
这意味着数据库中的名称可以不同但它在浏览器中的呈现应该是相同的。
那么这个问题可能有点太长了,但希望有人可以分享一些好的经验:如何使用这些函数处理用户输入字符串?